highly voted previous answer的高票评述如下:
考虑有许多未初始化的缓冲区,长度为4096字节。将 您希望所有这些4k缓冲区都有助于 二进制的?那会浪费很多空间。
我正在将以下两个文件构建为ubuntu上的可执行文件:
main.c
int sum(int *a, int n);
int array[2] = {1,2};
int abc;//Comment in case (a) Uncomment in case (b) and (c)
int def;//Comment in case (a) and (b) Uncomment in case (c)
int main(){
int val = sum(array, 2);
return val;
}
sum.c
int sum(int *a, int n){
int i, s = 0;
for(i = 0; i < n; i++)
s += a[i];
return s;
}
以下命令用于创建可执行文件
$gcc -Og -o prog main.c sum.c
有3种情况:
(a)没有未初始化的全局变量。可执行文件的大小为8648字节。
(b)具有未初始化的全局变量abc
。可执行文件的大小为8680字节。
(c)具有未初始化的全局变量abc
和def
。可执行文件的大小为8704。
我的问题是,为什么可执行文件的大小甚至会改变?我的理解(也由上面的答案所证实)是,未初始化的全局变量不应影响可执行文件的大小。