Влияние неинициализированной глобальной переменной на размер исполняемого файла - PullRequest
0 голосов
/ 01 декабря 2018

A предыдущий ответ с высоким рейтингом * Сильно проголосовавший комментарий заявляет:

рассмотрите возможность иметь много неинициализированных буферов длиной 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.

Мой вопрос: почему размер исполняемого файла даже изменяется?Мое понимание (также подтвержденное ответом, связанным с вышеупомянутым) состояло в том, что неинициализированные глобальные переменные НЕ должны влиять на размер исполняемого файла.

...