Я знаю, что глобальные и статические переменные хранятся в .data
сегменте, а неинициализированные данные находятся в .bss
сегменте. Я не понимаю, почему у нас есть специальный сегмент для неинициализированных переменных? Если неинициализированной переменной присвоено значение во время выполнения, существует ли эта переменная .bss
только в сегменте?
В следующей программе a
находится в .data
сегменте и b
находится в .bss
сегменте; это правильно? Пожалуйста, поправьте меня, если я неправильно понимаю.
#include <stdio.h>
#include <stdlib.h>
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */
int main ()
{
;
}
Также рассмотрите следующую программу,
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}