Die Antwort ist leicht Implementierung empfindlich, aber im Allgemeinen, nein. Ihr g_glbarr
ist wirklich ein Zeiger auf char
oder eine Adresse. Der String selbst wird mit konstanten Strings in den Datenbereich geschrieben und g_glbarr
wird ein Symbol für die Adresse des Strings zum Zeitpunkt der Kompilierung. Sie ordnen nicht schließlich Speicherplatz für den Zeiger zu und der Compiler löst die Adresse einfach zu Verbindungszeit auf.
aktualisieren
@Jay, dann ist es sorta irgendwie gleich. Die Integer (normalerweise) sind nur In-line: Der Compiler wird so nah wie möglich kommen, um die Konstante in den Code zu setzen, denn das ist so ein gewöhnlicher Fall, dass die meisten normalen Architekturen einen direkten Weg aus unmittelbaren Daten haben. Die String-Konstanten befinden sich immer noch in einigen schreibgeschützten Datenbereichen. Also, wenn Sie so etwas wie machen:
// warning: I haven't compiled this and wouldn't normally
// do it quite this way so I'm not positive this is
// completely grammatical C
struct X {int a; char * b; } x = { 1, "Hello" } ;
die 1
wird „sofort“ Daten werden die "Hello"
irgendwo im schreibgeschützten Daten zugeordnet ist, und der Compiler wird nur etwas erzeugen, die ein Stück Lese-Schreib-Daten zuordnet, dass so etwas wie
x:
x.a: WORD 1
x.b WORD @STR42
sieht, wo STR42
für den Standort des Strings "Hello"
im Speicher ein symbolischer Name ist. Wenn dann alles miteinander verknüpft ist, wird die @STR42
durch die tatsächliche virtuelle Adresse der Zeichenfolge im Speicher ersetzt.
Das String-Literal ** kann ** entfernt ** werden, wenn ** es nirgendwo tatsächlich verwendet wird. –
Das String-Literal ist nur ein Beispiel. Es kann viele solcher globalen Variablen geben, die ein Array von Strukturen sein können und mit Strings, Ganzzahlen usw. initialisiert werden können. Wird das Zuweisen von Speicher für diese globalen Variablen mit Hilfe von malloc irgendeine Größe reduzieren? – Jay
"Warum ist es wichtig, welcher" Abschnitt "der ausführbaren Datei erhöht wird?" - Es geht nur darum, ein tieferes Verständnis dafür zu bekommen, wie die Dinge funktionieren. – Jay