| ggabu420 |
printf("%s",~~); 등으로 쓸 때 사용되는 "%s" 와 같은 리터럴 문자열의 경우
보통 쓰기 불가능한 데이터 영역에 저장이 됩니다.
과거에는 이 영역이 반드시 쓰기 불가능한 영역에 저장되지는 않았습니다.
그러나 요즘 컴파일러는 대부분 이 영역의 쓰기 권한을 없게 만들어 놓았습니다.
보통 .data 또는 .rodata 등으로 불리는 섹션에 따로 저장이 됩니다.
가령 char *str="d0lphin is not genius!" 이라는 선언문이 있을 경우
데이터 섹션에 "d0lphin is not genius!" 라는 문자열이 있고,
str 변수에는 해당 문자열이 위치하는 곳의 시작 주소가 들어가게 되는 것입니다.
같은 예로 char str[]="d0lphin is not genius!" 처럼 하면 자동으로 이 코드는
해당 문자열의 시작 주소부터 끝까지 해당 변수가 선언된 함수의 지역변수 영역에
str 배열의 시작부분부터 쫙 복사하는 것입니다.
지금 무엇을 헷갈려하시는지를 잘 모르겠는데, 포인터 변수의 크기는 타입에 관계없이
항상 빌드 타겟 CPU의 버스 크기로 결정이 됩니다. 주소와 관계된 변수가 아닌 다른 변수들의
경우 별 상관이 없습니다. |
2011/02/28 |
|