Аналогичные вопросы заданы о типе данных строковых литералов в С++.
Многие люди процитировали стандарт:
Узкий строковый литерал имеет тип "массив из n const char", где n - размер строки, как определено ниже, и имеет статическую продолжительность хранения (3.7)
В основной функции я написал следующий оператор:
char cstring[]= "hellohellohellohellohellohello";
Но я не могу найти ни строковый литерал, который хранится как статические данные в сборке. Фактически, сборка показывает, что строка разлагается и "сохраняется" непосредственно в инструкциях.
movl $1819043176, -48(%rbp)
movl $1818585199, -44(%rbp)
movl $1701343084, -40(%rbp)
movl $1752132716, -36(%rbp)
movl $1869376613, -32(%rbp)
movl $1819043176, -28(%rbp)
movl $1818585199, -24(%rbp)
movw $28524, -20(%rbp)
movb $0, -18(%rbp)
В то время как аналогичный оператор в глобальной области имеет в результате строку, хранящуюся как статические данные.
char cstring1[] = "hellohellohellohellohellohello";
Сборка
cstring1:
.string "hellohellohellohellohellohello"
Приведенный выше пример доступен в Интернете здесь.
Таким образом, это не соответствует приведенному стандарту. Может быть, есть некоторые исключения из того, что здесь цитируется?