Warum werden Konstanten im Textsegment einer C-Memory-Map gespeichert?

Hallo, bitte beachten Sie die folgenden Codefragmente, die mit gcc auf einem Linux-Computer (64-Bit) mit der entsprechenden Speicherkarte kompiliert wurden

#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

Hier ist da eine globale Variable auf 2 initialisiert. Es wurde im Datensegment gespeichert. Betrachten Sie den Fall, in dem es wie unten gezeigt const gemacht wird

#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

Hier wird die globale Variable vom Datensegment in das Textsegment verschoben.

Warum wird es von den Daten in das Textsegment verschoben?

Da das Datensegment in Lese- und Schreib-Lese-Bereiche unterteilt ist, sollte es im Lesebereich der Daten gespeichert sein, oder?

Was passiert mit einer nicht initialisierten globalen Variablen, die in der Mitte des Codes initialisiert wird?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage