C-Optimierung von String-Literalen

habe gerade folgendes in gdb überprüft:

char *a[] = {"one","two","three","four"};
char *b[] = {"one","two","three","four"};
char *c[] = {"two","three","four","five"};
char *d[] = {"one","three","four","six"};

und ich bekomme folgendes:

(gdb) p a
$17 = {0x80961a4 "one", 0x80961a8 "two", 0x80961ac "three", 0x80961b2 "four"}
(gdb) p b
$18 = {0x80961a4 "one", 0x80961a8 "two", 0x80961ac "three", 0x80961b2 "four"}
(gdb) p c
$19 = {0x80961a8 "two", 0x80961ac "three", 0x80961b2 "four", 0x80961b7 "five"}
(gdb) p d
$20 = {0x80961a4 "one", 0x80961ac "three", 0x80961b2 "four", 0x80961bc "six"}

Ich bin wirklich überrascht, dass die String-Zeiger für äquivalente Wörter gleich sind. Ich hätte gedacht, dass jeder Zeichenfolge ein eigener Speicher auf dem Stapel zugewiesen wurde, unabhängig davon, ob es sich um eine Zeichenfolge in einem anderen Array handelt.

Ist dies ein Beispiel für eine Art Compiler-Optimierung oder ein Standardverhalten für eine solche String-Deklaration?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage