작성
·
202
0
"I love Helly!" 문자열이 text segment 에 있다고 말씀하셨는데 text segment가 아니라 data segment 중에서 read only data부분에 있는거 아닌가요?
text segmaent라고 하셔서 혼동이 오네요 ㅠ
답변 3
3
1. 은 32bit system이기 때문에 4byte 단위로 끊어서 구성하기 위해서입니다. 조금 더 생각해보시면 이해하실 것 같습니다.
2. 후술하신 것이 맞습니다.
3
안녕하세요? 좋은 질문이라고 생각합니다. 주의깊게 듣고계시는군요.
강의의 설명의 일관성을 따지자면 이상한 것이 맞습니다. (10:40~, 12:24~의 화살표 방향과 맞지않음)
살펴본 바로는 Bryant, Computer Systems A Programmer's Perspective 2th ed. (678 pp.)
에 따르면, .text와 .rodata를 code segment(text segment)로 분류합니다. (in UNIX)
그리고, gcc compiler, powershell 을 사용한 경우도 이 관점과 비슷하군요.
#include <stdio.h> // code #1
int main()
{
printf("Hello, World!");
return 0;
}
#include <stdio.h> // code #2
int main()
{
printf("Hello, World!Hello, World!");
return 0;
}
위쪽 size 결과가 code #1 에 대한 것이고, 아래쪽 size 결과가 code #2에 대한 것입니다.
text segment가 늘어난 결과로 보아서도 .rodata 는 data segment가 아닌 text segment에 있습니다.
1
와 답변 최곱니다 추가질문좀할게요ㅠ
1. Hello, World!가 추가되면 뛰어쓰기포함 text부분이 13byte가 증가돼야 할것같은데 12byte가 증가됬네요 왜 그런가요?
2. "Hello, World!"는 stack에 들어가야 될 것 같은데 text에 추가됐네요. text segment에 "Hello, World!" 문자열을 저장해놓고 printf함수가 포인터처럼 주소만 찾아가서 출력하는 방식인 건가요?
강의내용과 연관지어 생각하려니까 어려운 부분이 많네요..