Por que as constantes são armazenadas no segmento de texto em um mapa de memória C?

Olá Por favor, considere os trechos de código abaixo compilados com o gcc em uma máquina Linux (64 bits) com o mapa de memória correspondente

#include <stdio.h>

int global = 2;

int main(void)
{
    int local = 0;

    return 0;
}

text       data     bss     dec     hex filename

1092        500      16    1608     648 mem

Aqui, uma vez que existe uma variável global inicializada para 2. Tem sido armazenado no segmento de dados Considere o caso de torná-lo const como mostrado abaixo

#include <stdio.h>

int const global = 2;

int main(void)
{
    int local = 0;

    return 0;
}

text       data     bss     dec     hex filename
1096        496      16    1608     648 mem

Aqui, a variável global é movida do segmento de dados para o segmento de texto.

Por que é movido dos dados para o segmento de texto?

Como o segmento de dados é dividido em áreas de leitura e leitura e gravação, ele deveria ter sido armazenado na área de leitura dos dados, certo?

O que acontece com uma variável global não inicializada inicializada no meio do código?

questionAnswers(3)

yourAnswerToTheQuestion