solo estado inspeccionando el siguiente en GDB:optimización de cadenas literales C
char *a[] = {"one","two","three","four"};
char *b[] = {"one","two","three","four"};
char *c[] = {"two","three","four","five"};
char *d[] = {"one","three","four","six"};
y me sale el siguiente:
(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"}
Estoy muy sorprendido de que los punteros de cadena son los mismos para equivalente palabras. Pensé que a cada cuerda se le habría asignado su propia memoria en la pila, independientemente de si era igual a una cadena en otra matriz.
Es este un ejemplo de algún tipo de optimización del compilador o se trata de un comportamiento estándar para la declaración de cadena de este tipo?
¿De dónde vino la "pila" incluso en esta pregunta? Si declaras 'a',' b', 'c' y' d' como variables locales, tienes que decirlo en tu pregunta. – AnT
sí - son variables locales de duración automática declaradas dentro de una función, por lo tanto, en la pila – bph
Sí. Es un ejemplo de optimización del compilador. – Jack