也许这是一个愚蠢的问题。但是我想了解它并且找不到答案。当我像下面这样写:
int test[1000000] = {0};
这个数组会包含在编译后的程序代码中吗?还是仅用于为该数组保存可用内存的指令?
我想了解在这种情况下,C++ 是将所有数组的值包含在二进制代码中还是在运行时分配内存?
最佳答案
这个问题的答案在很大程度上取决于所使用的数据格式。
比如你写这个的时候
int test[1000000] = {1, 2, 3};
并使用生成 ELF 的编译器可执行文件时,编译器发出 1, 2, 3
的数据,但将该部分的大小设置为 sizeof(test)
。当 ELF 可执行文件加载到内存中时,加载程序将 1, 2, 3
存储在前四个 int
中,并将剩余部分清零到最后。 See this Q&A for more details on ELF's handling of trailing zeros in a data section .
其他可执行格式具有类似的功能:本质上,它们不是在文本部分存储零,而是存储指令,以便加载程序将一些静态内存放在一边,并在执行程序之前将其清除。
注意:答案假定 test
分配在全局范围内。
关于c++ - 编译器在哪里存储常量数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090327/