Почему константы хранятся в текстовом сегменте на карте памяти 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

Здесь глобальная переменная перемещается из сегмента данных в текстовый сегмент.

Почему он перемещается из данных в текстовый сегмент?

Поскольку сегмент данных разделен на области чтения и чтения-записи, он должен был храниться в области чтения данных, верно?

Что происходит с неинициализированной глобальной переменной, инициализированной в середине кода?

Ответы на вопрос(3)

Ваш ответ на вопрос