也许这是一个愚蠢的问题。但我想了解它,找不到答案。当我写如下的东西时:
int test[1000000] = {0};
Run Code Online (Sandbox Code Playgroud)
这个数组会包含在编译后的程序代码中吗?还是仅保留该阵列可用内存的指令?
我想了解C ++在这种情况下是在二进制代码中包含所有数组的值还是在运行时分配内存?
这个问题的答案在很大程度上取决于所使用的数据格式。
例如,当你写这个
int test[1000000] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
并使用产生ELF可执行文件的编译器,编译器会发出的数据1, 2, 3,但将段的大小设置为sizeof(test)。当ELF可执行文件加载到内存中时,加载程序将存储1, 2, 3在前四个ints中,并将剩余部分归零。有关ELF在数据部分中尾随零的处理的更多详细信息,请参见此问答。
其他可执行文件格式也具有类似的功能:基本上,它们不是在文本部分中存储零,而是存储指令以供加载器留出一些静态内存,并在执行程序之前将其清除。
注意:答案假定test是在全局范围内分配的。
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |