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포인터가 의미 없어지고 있습니다.