C otimização de literais de string

apenas inspecionando o seguinte no gdb:

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 eu recebo o seguinte:

(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"}

Estou realmente surpreso que os ponteiros de string sejam os mesmos para palavras equivalentes. Eu teria pensado que cada string teria sido alocada sua própria memória na pilha, independentemente de ser o mesmo que uma string em outra matriz.

Este é um exemplo de algum tipo de otimização do compilador ou é um comportamento padrão para declaração de string desse tipo?

questionAnswers(2)

yourAnswerToTheQuestion