Странное поведение утилиты размера

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, пока она также не будет заполнена, и так далее.

Другие вопросы по тегам