int num = 0x01020304;
char * str = "abcd";
num은 스택에 쌓일때
4 - (char*)&num + 0번지
3 - (char*)&num + 1번지
2 - (char*)&num + 2번지
1 - (char*)&num + 3번지
str[0]~str[3]은 스택에 쌓일때
a - str + 0번지
b - str + 1번지
c - str + 2번지
d - str + 3번지
이렇게 쌓인다..
------
num의 결과와 str의 결과가 다른 이유는 다음과 같다.
우선 메모리의 각각의 주소번지마다 1byte의 데이터가 저장된다고 하자.
num의 경우에는 4바이트 int형 값이므로 메모리에 저장되기 위해서는 값이 쪼개져야 한다.
(4byte 데이터를 1byte 단위의 공간에 바로 저장할 수 없으므로)
따라서 바이트 순서라는 문제가 발생하고.. 리틀 엔디안 방식에서는 가장 낮은 위치의 데이터를
가장 낮은 주소에 저장한다.
반면 str의 경우에는 데이터 저장의 단위가 1바이트 char형이므로(str를 4바이트 값이라고 보지 말자)
메모리에 저장되기 위해서 값이 쪼개져야 하는 문제가 없고, 따라서 바이트 순서 문제가 발생하지 않는다.
그래서, 1바이트 char 저장단위는 빅엔디안 방식이든 리틀엔디안 방식이든 메모리에 동일한 순서로 배치
된다.
더 자세한 설명은 다음을 참고 : http://huammmm1.tistory.com/469
'C > 공개글' 카테고리의 다른 글
static 함수 (0) | 2013.05.03 |
---|---|
open() 으로 파일권한 설정하는법 (0) | 2013.05.01 |
시프트 연산자(shift operation) (0) | 2013.04.13 |
왜 싱글포인터의 주소값은 더블포인터로 받아야 할까? (내생각) (0) | 2013.04.13 |
WSAGetLastError() 호출 후 10038이 반환되는 경우 (0) | 2013.03.04 |