gpt4 book ai didi

c++ - 为什么在添加更多变量和/或指令时程序大小保持不变?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:07 25 4
gpt4 key购买 nike

我从一个“空”程序开始,检查生成的 .exe 文件的大小

int main()
{
system("pause");
}

Exe 大小:58.5 KB(59,904 字节)

然后我添加了大量的静态变量

int main()
{
const int BIG_NUMBER = 40000000;
static int x[40000000];

system("pause");
}

Exe 大小:58.5 KB(59,904 字节)

使数组成为非静态的也没有效果。我添加了一些代码来 (a) 100% 确保变量没有被优化掉,以及 (b) 查看额外的指令是否会增加 .exe 的字节数

int main()
{
const int BIG_NUMBER = 40000000;
static int x[40000000];
for (int i = 0; i < BIG_NUMBER; ++i)
{
std::cout << x[i] << std::endl;
}
system("pause");
}

Exe 大小:58.5 KB(59,904 字节)

从字面上看,一个字节都没有。在这一点上,我(暗中猜测)的猜测是 .exe 请求操作系统在程序启动时为静态变量分配所需的正确内存量,但这似乎不正确。什么决定了 .exe 文件的大小?

最佳答案

我在使用和不使用大数组的情况下编译了您的程序,转储了两个节标题并进行了比较。这是唯一的区别:

     Idx Name          Size      VMA               LMA           File off  Algn
- 23 .bss 09896820 0000000000004020 0000000000004020 00003010 2**5
+ 23 .bss 00000008 0000000000004010 0000000000004010 00003010 2**0

如您所料,两者之间唯一的大小差异是 block of memory that the executable requests from the OS 的大小。 .可能会有一两个额外的字节代码,但无论如何代码可能会四舍五入到最近的页面。

如链接页面所述:

Typically only the length of the bss section, but no data, is stored in the object file. The program loader allocates memory for the bss section when it loads the program.

关于c++ - 为什么在添加更多变量和/或指令时程序大小保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438048/

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