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