Почему константы хранятся в текстовом сегменте на карте памяти C?
Здравствуйте. Пожалуйста, рассмотрите приведенные ниже фрагменты кода, скомпилированные с помощью gcc на машине Linux (64-битной) с соответствующей картой памяти.
#include
int global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1092 500 16 1608 648 mem
Здесь, поскольку есть глобальная переменная, инициализированная 2. Он был сохранен в сегменте данных. Рассмотрим случай, как сделать его постоянным, как показано ниже
#include
int const global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1096 496 16 1608 648 mem
Здесь глобальная переменная перемещается из сегмента данных в текстовый сегмент.
Почему он перемещается из данных в текстовый сегмент?
Поскольку сегмент данных разделен на области чтения и чтения-записи, он должен был храниться в области чтения данных, верно?
Что происходит с неинициализированной глобальной переменной, инициализированной в середине кода?