티스토리 뷰
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
TAG
- breakpoint
- 칠오름농장
- 명언
- icon program
- 샤워기전
- 대일농장
- icon tool
- 고강도
- 늙기
- 영귤
- 데크에 바인딩묶기
- 인테리어
- sudachi
- 그림편집
- 의학
- 영귤차
- 인공안구
- 편집프로그램
- network error
- 제주영귤
- 미스터피자주문
- 상식
- 제주녹색농원
- 칠오름
- 보드고글
- 녹색농원
- 인공눈
- 스타치
- 과학
- 무릎마사지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함