未初始化的全局变量对可执行文件大小的影响

时间:2018-12-01 08:59:02

标签: c compilation linker

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)具有未初始化的全局变量abcdef。可执行文件的大小为8704。

我的问题是,为什么可执行文件的大小甚至会改变?我的理解(也由上面的答案所证实)是,未初始化的全局变量不应影响可执行文件的大小。

0 个答案:

没有答案