appena stato ispezionare il seguente in gdb:ottimizzazione C di stringhe letterali
char *a[] = {"one","two","three","four"};
char *b[] = {"one","two","three","four"};
char *c[] = {"two","three","four","five"};
char *d[] = {"one","three","four","six"};
e ottengo il seguente:
(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"}
Sono davvero sorpreso che i puntatori di stringa sono gli stessi per equivalente parole. Avrei pensato che a ogni stringa sarebbe stata assegnata la propria memoria nello stack indipendentemente dal fatto che fosse uguale a una stringa in un altro array.
È un esempio di ottimizzazione del compilatore o comportamento standard per la dichiarazione di stringhe di questo tipo?
Da dove arriva lo "stack" in questa domanda? Se hai dichiarato 'a',' b', 'c' e' d' come variabili locali, devi dirlo nella tua domanda. – AnT
sì - sono variabili locali di durata automatica dichiarate all'interno di una funzione quindi nello stack – bph
Sì. È un esempio di ottimizzazione del compilatore. – Jack