강좌 & 팁
글 수 2,412
2012.04.29 23:09:35 (*.172.215.154)
50093
Dos 시절의 메모리와 포인터
예전 도스 시절에는 세그먼트(16bit)와 오프셋(16bit)이라는 개념으로 메모리를 다루었다.
오프셋을 사용하여 접근할 수 있는 메모리 공간은 64KB 가 되고 세그먼트와 옵셋을 모두 사용할 경우 접근할 수 있는 메모리 공간은 총 1MB 이다.
near포인터는, 16비트 포인터(표현 가능 범위: 0x0000)입니다. 이 포인터에는 오프셋 주소만을 저장할 수 있기 때문에, 현재 세그먼트 영역에 있는 데이터만을 가리키는 포인터이다
far포인터는 32비트 포인터(표현 가능 범위: 0x0000 0000)이며, 세그먼트 16비트, 오프셋 16비트씩 값을 가지고, 이를 통해 20비트로 이뤄진 메모리 영역 전체를 가리킬 수 있는 포인터이다.
int far *fp; // fp는 1MB 메모리 영역용 far 포인터
int near *np; // np는 64KB 메모리 영역용 near 포인터
세그먼트와 오프셋의 값을 계산해서 20비트의 메모리 주소를 표현한다.
FA00 : 0002 (세그먼트 주소 : 오프셋 주소) = FA002 (실제 주소)
FA00
(세그먼트 주소)
+ 0002 (오프셋 주소)
------------------
FA002 (실제 주소)
*16비트 메모리 환경에서 20비트 메모리 주소를 표현 한다
지금은 32비트 메모리 영역을 사용하게 되면서, near포인터, far포인터가 의미 없어지고 있습니다.