Я знаю, что глобальные и статические переменные хранятся в .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 ?** */
}