首页 > 解决方案 > 未初始化的全局变量对可执行文件大小的影响

问题描述

一个高度投票的先前答案的高度投票评论指出:

考虑有许多长度为 4096 字节的未初始化缓冲区。您是否希望所有这些 4k 缓冲区都有助于增加二进制文件的大小?那会浪费很多空间。

我正在将以下两个文件构建到 ubuntu 上的可执行文件中:

主程序

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;
}

总和.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。

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

标签: ccompilationlinker

解决方案


推荐阅读