Ответ 1:
int main()
{
const char* string = "hello"; // string is not in a data segment, it's in the text segment
fputs(string, stdout);
return 0;
}
Ответ 2:
int main()
{
char[6] string = "hello"; // Space for string allocated on stack
fputs(string, stdout);
return 0;
}
С gcc второй ответ, кажется, генерирует следующее:
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $36, %esp
movl $1819043176, -10(%ebp) ;<< hell
movw $111, -6(%ebp) ;<< o\0
movl stdout, %eax
movl %eax, 4(%esp)
leal -10(%ebp), %eax
movl %eax, (%esp)
call fputs
movl $0, %eax
addl $36, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
, который явно использует только стек.