这些常量数组是在内存中分配空间还是编译器足够聪明并将其分解为文字?
我只是举个例子:
const int array[] = {
1, 2, 3, 4, 5
};
好吧,我只想知道别的。
最佳答案
简短的回答是:视情况而定。
长答案是:
如果你编译这个:
const int array[] = {
1, 2, 3, 4, 5
};
int
main()
{
return array[0];
}
你最终在 x86/Linux 上得到这个(简化):
.globl main
main:
movl $1, %eax
ret
所以是的,它不会存储在任何地方,而是被视为在编译时评估的常量。
但是,如果你这样使用它:
const int array[] = {
1, 2, 3, 4, 5
};
int
main()
{
return (long)array;
}
它变成了:
.globl main
main:
leal _ZL5array(%rip), %eax
ret
.section .rodata
.align 16
_ZL5array:
.long 1
.long 2
.long 3
.long 4
.long 5
它在 rodata 部分结束,因为您告诉编译器您实际上需要它作为数组。
关于c++ - C++ 编译器如何处理 const 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811137/