c++ - 编译器在哪里存储常量数组?

标签 c++ arrays

也许这是一个愚蠢的问题。但是我想了解它并且找不到答案。当我像下面这样写:

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/

相关文章:

javascript - Express.js 中的数组 foreach 错误

arrays - 如何将整数数组转换为字符串?

javascript - 使用 Id 关联现有数组

c++ - hudson 、C++ 和 UnitTest++

c++ - 我将如何准确地获取打开的文件和文件中的名称并将它们放入我的字符串 vector 中?

c++ - 矩阵实现基准,我应该鞭策自己吗?

java - Android 中的复杂 JSON 解析 - 多对象和数组

c++ - 静态二维数组

c++ - Clion,在 C++ 项目中创建新文件

C++ 简单计算器(无 if、Switch、Case 及其种类)