После разборки следующий код:Почему локальные строки, объявленные в основной функции, являются частью памяти сегмента Rodata?
#include <stdio.h>
static const char HELLO1[] = "Howdy";
int main(){
char hello2[6]="hello\0";
printf("%s",string);
}
можно видеть, что строки hello1 объявляется в сегменте .rodata, что вполне понятно, как постоянные переменные объявляются в этом сегменте.
Однако hello2 также объявлены в сегменте .rodata. Но локальные переменные объявляются в Stack прямо вправо?
Можете ли вы объяснить мне, почему эта строка объявлена в этот сегмент?
Ответ на вопрос о совместимости/платформе - которые отсутствуют. – chux
Duke, какой флаг компиляции вы используете? 'Hello2' не создается в стеке в соответствии с примечанием @NulledPointer ниже; они могли бы испускать сложную строку. Я заметил, что «clang» также будет делать это вместе с совокупными типами данных. –