数组声明是否意味着连续的内存分配?

int main() {
 char a[5];
 a[0] = 0;
 return a[0];
}

在这个片段中char a[5];,没有任何初始化的数组声明是否保证分配 5 个字节的连续内存?

或者因为稍后只有 1 个元素被初始化,编译器可以自由地使用该 1 个元素的寄存器?

我假设读取此数组旁边的任何其他索引0都是未定义的行为。

回答

它保证程序的可观察行为将与分配此内存时相同。

编译器可以像您的简单示例一样自由地优化任何对象:

main:
        xor     eax, eax
        ret

https://godbolt.org/z/KE5PzvTKq

  • @Dan yes ---------

以上是数组声明是否意味着连续的内存分配?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>