如果我编译以下程序 int array[5000]={0}; int main(){}
,输出文件大小比我做的要小得多int array[5000]={1}; int main(){}
, 将第一个元素初始化为 1,其余元素初始化为 0,那么为什么文件大小会有如此大的差异呢?
最佳答案
您的 array
是一个静态全局变量。
如果声明为仅用零初始化,则可以将其分配在一个特殊的内存段中,该内存段在进程启动期间创建并用零初始化。
OTOH 如果它被声明为包含任何非零值,它的初始值必须存储在程序的文件中,以便操作系统在内存中准备运行程序时,它可以分配适当的数据段并用定义的数据填充它初始值。
见 https://en.wikipedia.org/wiki/Data_segment用于 DATA 和 BSS 段。
关于c - 为什么用 1 和 0 初始化数组会使可执行文件如此之大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69034904/