far, near 포인터는 예전 Dos 시절에 사용하던 포인터 들입니다.
16비트 메모리 환경에서 20비트 메모리 주소를 표현하기 위해서 사용되었습니다.
그 당시에는 메모리에 접근하기 위해서 오프셋(16bit)과 세그먼트(16bit)라는 것을 사용해서
예를 하나 들자면 F000 : 0001 (세그먼트 주소 : 오프셋 주소) = F0000001 (실제 주소)
이렇게 두 값을 더해서 메모리 주소를 표현 했습니다.
near 포인터는 오프셋 포인터만을 저장할 수 있어 16 bit의 크기를 가지고 있습니다.
far 포인터는 세그먼트 와 오프셋을 모두 저장이 가능하고 32bit의 크기를 가지고 있습니다.
그리고 huge 라는 포인터도 있는데 이 포인터는 오프셋을 저장하지만
far 포인터와는 다르게 오프셋의 값에 0 ~ 15까지의 값 만 넣을수 있다고 합니다.
이 주소를 사용하면 주기억 장치의 한 장소 중에서 주소가 딱 하나로 결정되는 장점이 있다고 하네요.
현재의 win32에서는 사라진 것으로 알려져 있으나 windows.h 에 아직 존재하기는 합니다. 아래와 같이 코드를 작성한후 돌리게 되면 아래 사진과 같은 결과를 얻을 수 있습니다.
#include <stdio.h>
#include <windows.h>
void main(void) {
int far test = (int far)new int;
short near test2 = (short near)new short;
printf("far : %d\n", test);
printf("near : %d\n", test2);
system("pause");
}
* 원래 정석대로면 farmalloc 등을 이용해서 할당을 하는게 맞긴 하지만 들어 있는 헤더를 찾지 못해서 new 로 비슷하게 구현했습니다.
현재에 들어와서는 32비트 메모리 환경을 사용하게 되면서 사용되지 않게된 포인터입니다.
아직 까지는 windows.h 에 정의되어 있긴하지만...int형의 기본 크기가 16bit인 16bit 환경에서는 사용하기에 적당할것 같으나
32bit환경에서는 전부다 32bit로 값을 반환해주니...쓸모가 없어진듯 합니다.
16비트 메모리 환경에서 20비트 메모리 주소를 표현하기 위해서 사용되었습니다.
그 당시에는 메모리에 접근하기 위해서 오프셋(16bit)과 세그먼트(16bit)라는 것을 사용해서
예를 하나 들자면 F000 : 0001 (세그먼트 주소 : 오프셋 주소) = F0000001 (실제 주소)
이렇게 두 값을 더해서 메모리 주소를 표현 했습니다.
near 포인터는 오프셋 포인터만을 저장할 수 있어 16 bit의 크기를 가지고 있습니다.
far 포인터는 세그먼트 와 오프셋을 모두 저장이 가능하고 32bit의 크기를 가지고 있습니다.
그리고 huge 라는 포인터도 있는데 이 포인터는 오프셋을 저장하지만
far 포인터와는 다르게 오프셋의 값에 0 ~ 15까지의 값 만 넣을수 있다고 합니다.
이 주소를 사용하면 주기억 장치의 한 장소 중에서 주소가 딱 하나로 결정되는 장점이 있다고 하네요.
현재의 win32에서는 사라진 것으로 알려져 있으나 windows.h 에 아직 존재하기는 합니다. 아래와 같이 코드를 작성한후 돌리게 되면 아래 사진과 같은 결과를 얻을 수 있습니다.
#include <stdio.h>
#include <windows.h>
void main(void) {
int far test = (int far)new int;
short near test2 = (short near)new short;
printf("far : %d\n", test);
printf("near : %d\n", test2);
system("pause");
}
* 원래 정석대로면 farmalloc 등을 이용해서 할당을 하는게 맞긴 하지만 들어 있는 헤더를 찾지 못해서 new 로 비슷하게 구현했습니다.
현재에 들어와서는 32비트 메모리 환경을 사용하게 되면서 사용되지 않게된 포인터입니다.
아직 까지는 windows.h 에 정의되어 있긴하지만...int형의 기본 크기가 16bit인 16bit 환경에서는 사용하기에 적당할것 같으나
32bit환경에서는 전부다 32bit로 값을 반환해주니...쓸모가 없어진듯 합니다.

댓글
댓글 쓰기