Странное поведение утилиты размера
1-й случай:
#include <stdio.h>
int main(void)
{
return 0;
}
Размер вывода:
text data bss dec hex filename
1115 552 8 1675 68b ./a.out
2-й случай:
#include <stdio.h>
int global; // new line compared to previous case
int main(void)
{
return 0;
}
размер вывода:
text data bss dec hex filename
1115 552 8 1675 68b ./a.out
В идеале это должно быть:
bss=12 and all other (text and data) same
3-й случай:
#include <stdio.h>
int global;
int main(void)
{
static int i; // new line compared to previous case
return 0;
}
размер вывода:
text data bss dec hex filename
1115 552 16 1683 693 ./a.out
это правильно
Почему вывод во 2-м случае не верен?
1 ответ
Решение
Вы, вероятно, компилируете для 64-битной архитектуры, в которой объем памяти выровнен до 8 байтов (64 бит).
Программа, такая же простая, как в первом случае, имеет 4-байтовый начальный bss, но для выравнивания выделено 8 байтов, поэтому, объявив глобальную переменную, вы заполнили 4 левых байта.
Объявление другой 4-байтовой переменной добавит 8 байтов к bss, пока она также не будет заполнена, и так далее.