¿Por qué las constantes se almacenan en el segmento de texto en un mapa de memoria C?

Hola. Por favor, considere los fragmentos de código a continuación compilados con gcc en una máquina Linux (64 bits) con el mapa de memoria correspondiente

#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

Aquí ya que hay una variable global inicializada a 2. Se ha almacenado en el segmento de datos. Considere el caso de hacerlo constar como se muestra a continuación.

#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

Aquí la variable global se mueve del segmento de datos al segmento de texto.

¿Por qué se mueve de los datos al segmento de texto?

Dado que el segmento de datos se divide en áreas de lectura y lectura-escritura, debería haberse almacenado en el área de lectura de los datos, ¿no?

¿Qué sucede con una variable global sin inicializar inicializada en medio del código?

Respuestas a la pregunta(3)

Su respuesta a la pregunta