티스토리 뷰



c 에서 아래와 같은 string 의 종류 2가지에 대한 설명을 잘 해 놨다.

char a[10] = "Test1";
char* b = "Test2";

printf("%d\n", &a);
printf("%d\n", &a[0]);
printf("%d\n", &b);
printf("%d\n", &(b[0]));

대략적으로는 환경마다 틀리지만,

1번째 string 은 언제나 stack 에서 만들어져 rodata 영역에 만들어져 함수호출시마다 stack 에 copy 된다. 그러므로 RAM 영역에 load 된다고 볼 수 있다.

2번째 string(char*)은 RO-DATA(Read only, .rodata) 영역에 있다가 RAM 으로 load 되기도 하며, 그냥 ROM 상에서 처리되기도 한다. 이 것은 char* a 가 단지 주소값만을 가지고, 그 주소가 가리키는 곳은 다른 곳에 있기 때문이다. 만약 char b[10] 처럼 stack 에 만들어져서 b 자신이 "Test"의 "T" 가 되는 경우는 읽기/쓰기 를 전부 지원(?)해야 하기 때문에 RAM 영역에 올라온다고 할 수 있겠다.(?)

쉽게 얘기하면 &a(char* a 의 주소) 와 &b(b의 주소) 는 의미가 다르다. 위의 printf() 를 실행해 보면 알 수 있을 것이다.

자세한 내용은 밑을 참고하자.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함