|
포인터 변수의 건너뜀은 4바이트란 개념을 모르겠습니다.
쉽게 다시 한번 말씀해 주실수 있으신지요?
그리고 제가 질문한 내용이 좀 이해하기 어려우시죠?
그래서 질문했던 내용을 다시 질문합니다.
예를들어 다음 두개의 배열이 있을경우
char a[5]={...
char b[5]={...
메모리상에 b[0]부터 저장하고 a[4]를 마지막에 저장하는 것 같은데
b[4]의 어드레스와 a[0]의 어드레스가 어떤 연관이 있는지요?
즉 b[4]의 어드레스 다음에 저장되는 a[0]의 주소값은
반드시 XXXXXXX0,XXXXXXX4,XXXXXXX8,XXXXXXXC중 하나로 시작됩니다.
그렇기때문에 b[4]의 어드레스가 xxxxxxx3,xxxxxxx7,xxxxxxxB,xxxxxxxF일 경우에는
메모리상에 갭없이 a[0]가 바로 위치하지만
다른 주소일경우에는 메모리상에 갭이 존재하게 됩니다.
최대 3바이트가 비어있을 경우가 생기죠.
하지만 다음과 같이 포인터로 초기화한다면
char *a={...
char *b={...
메모리상에 a의 요소부터 위치하게 되며
b의 첫번째 요소의 어드레스는 a의 마지막 널값 다음에 위치합니다.
메모리상 어떤 갭이 존재하지 않게 됩니다.
gcc에서도 동일하고 builder에서도 동일한 현상을 보입니다.
32비트 컴파일러가 그런건가요?
제 질문의 의도를 아시겠나요?
그럼 답변 부탁드립니다.
|