数组声明是否意味着连续的内存分配?
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 ---------