Размер раздела BSS варьируется между программами.Он описывает объем данных, который инициализируется «нулевыми байтами».Нули на самом деле не сохраняются в объектном файле, но сохраняется размер раздела BSS.
Раздел данных содержит начальные значения всех структур данных, которые не инициализированы как «все байты ноль»;это также варьируется между программами.Он не включает пробел, включенный в раздел BSS.
Вы получили бы больший раздел BSS с такой программой:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum { A_SIZE = 100 };
static int a[A_SIZE];
int main(void)
{
srand(time(0));
for (int i = 0; i < A_SIZE; i++)
a[i] = i;
for (int i = A_SIZE; i > 0; i--)
{
int j = rand() % i; // Not good random number generation!
int t = a[j];
a[j] = a[i-1];
a[i-1] = t;
}
for (int i = 0; i < A_SIZE; i++)
printf("%d\n", a[i]);
return 0;
}
Код перетасовывает числа изОт 0 до 99, с некоторым смещением в генерации случайных чисел (так что это не идеальное перемешивание, но на самом деле это не главное для упражнения - это просто нетривиальный код, использующий статический массив, даже еслилокальной переменной будет достаточно).Когда я запускаю size
(в Ubuntu 13.10), я получаю:
text data bss dec hex filename
1593 584 432 2609 a31 shuffle
Для сравнения в программе 'hello' в вопросе я получаю:
text data bss dec hex filename
1200 560 8 1768 6e8 hello
основное отличие состоит в том, что массив a
занимает 400 байт;остальные 24 байта BSS принадлежат другому коду.