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?