Локальные и статические переменные в C
При компиляции этого:
// external definitions
int value1 = 0;
static int value2 = 0;
компилятор gcc генерирует следующую сборку:
.globl value1
.bss
.align 4
.type value1, @object
.size value1, 4
value1:
.zero 4
.local value2
.comm value2,4,4
Однако, когда я инициализирую переменные значением, отличным от нуля, таким как:
// external definitions
int value1 = 1;
static int value2 = 1;
компилятор gcc сгенерировал следующее:
.globl value1
.data
.align 4
.type value1, @object
.size value1, 4
value1:
.long 1
.align 4
.type value2, @object
.size value2, 4
value2:
.long 1
Мои вопросы:
Почему в первом случае значения распределяются в сегменте bss, а во втором - в сегменте данных.Почему переменная value2 определяется как .local и .comm в первом случае, а не во втором.