c언어 literal의 저장 위치 질문입니다
글쓴이: mrx@Google / 작성시간: 월, 2020/04/27 - 3:08오후
int main()
{
char* str="123";
char str1[]="2323";
}
123은 read-only data로서 .rodata영역에 저장되고
2323은 stack에 저장되는게 맞나요?
str에 저장되는건 .rodata영역 내에서 '1'의 주소값이고요. str1에는 stack 내의 '2'의 주소값이고요.
Forums:
음 ..
"123", "2323" 모두 string literal 로 .rodata 에 저장될 겁니다.
char* str="123"; 는 str 에 "123" 의 주소를 저장하는 거고..
char str1[]="2323"; 는 str1 에 sizeof("2323") 만큼의 array 를 생성하고..
"2323" 을 복사해 줍니다.
참고로.. char* str="123"; 는 "123" 의 주소 (const char *) 를 저장하는 것이므로..
const char *str = "123"; 으로 써야 명확합니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
아하... 둘다 rodata에 저장되는군요
그리고 char str1[]="123"에서는 "123"이 스택에 복사가 되는건가보군요.
감사합니다.
cc -S sample.c
둘다 .rodata에 저장된다는 말씀인가요?
어셈블리어는 알겠는데 밑부분 내용은 잘 모르겠어요
제가 올렸는데, elf 포맷에 관련된 것들도 나오는거
제가 올렸는데, elf 포맷에 관련된 것들도 나오는거 같은데 저도 뭔말인지 모르겠네요. 문서 보기는 귀찮고 고수님들 낚아서 꽁으로 쉽게 배울려고 어셈 코드 올렸는데, 낚는 것도 쉽지 않네요~~
...
위의 ymir님이 말씀하신 것과 같은 내용입니다.
댓글 달기