当我将数组设置为 {1,1} 时,可执行文件的大小从 10 KiB 增加到 7 MiB。但是当我将其设置为 {} 时,大小不会改变。
long long fib[1000001] = {1,1}; // 7 MiB
Run Code Online (Sandbox Code Playgroud)
long long fib[1000001] = {}; // 10 KiB
Run Code Online (Sandbox Code Playgroud)
我使用 C++20 和 g++ 8.1.0。
它只发生在全局变量中,并且它使用什么类型的内存并不重要。
如果全局变量初始化为零,则可执行文件不必包含它的实际存储空间。它只需要告诉操作系统的可执行加载程序“我需要 X 字节存储全局数据”,加载程序就会提供该信息。该内存将被清零。
但是,如果全局变量被初始化为非零值,即使是部分非零值,那么它的数据必须来自某个地方。最简单的解决方案是在编译时生成数据字节并将它们推入可执行文件中。在运行时,对全局变量的引用指向加载的可执行文件的存储。
虽然这是特定于平台/操作系统的,但这通常是大多数可执行文件和编译器的工作方式
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |