gpt4 book ai didi

c++ - C++ 编译器如何处理 const 数组

转载 作者:行者123 更新时间:2023-11-30 04:17:52 25 4
gpt4 key购买 nike

这些常量数组是在内存中分配空间还是编译器足够聪明并将其分解为文字?

我只是举个例子:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com