gpt4 book ai didi

c++ - int t[1000000]={1,2,3};产生一个大的二进制文件,为什么?

转载 作者:行者123 更新时间:2023-11-30 02:22:42 26 4
gpt4 key购买 nike

int t[1000000];
int main(){}

此代码(作为 .cpp 文件)在使用 g++ 编译时会生成一个小型二进制文件。如果我稍后使用数组 t,它会将所有元素设置为 0。

int t[1000000]={1,2,3};
int main(){}

即使使用大小优化 (-Os) 进行编译,这个文件也会生成一个将近 4M 的二进制文件。数组 t 与第一个示例相同,除了 t[0]、t[1] 和 t[2] 分别设置为 1、2 和 3。为什么存储这三个数字需要额外的文件大小?
在 linux 上测试,gcc 版本 5.4.0

最佳答案

具有静态存储持续时间的零初始化数据通常非常有效地存储在可执行文件中。它几乎不占用磁盘空间。可执行文件包含几个单词,说明它需要多少个零初始化字节以及在哪个地址,仅此而已。

另一方面,静态初始化数据存储为表示其值的文字字节,如果这些字节中的大多数为零并不重要。可执行格式被定义为需要物理存储所有这些。没有规定以节省空间的方式指定“1、2、3,其余为零”。

当可执行文件加载到 RAM 中时,加载程序会为零初始化数据分配所需的内存量,并用零值字节填充它,因此不会节省 RAM,只会节省磁盘空间。

关于c++ - int t[1000000]={1,2,3};产生一个大的二进制文件,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47003805/

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