Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[252] Re:그래픽 함수의 원형에 있는 'far'라는 키워드에 대하여 설명 좀 부탁해요....
김성철 [douner] 3302 읽음    2002-01-31 01:36
안녕하세요^^

제가 아는 만큼만 쓰겠습니다.

도스에서는 메모리의 주소가 세그먼트:오프셋으로 구성됩니다.

+-----------------------+
| 세그먼트 00           |
+-----------------------+
|                       | ↗ 오프셋 00
  세그먼트 A3                   ↕
|                       | ↘ 오프셋 FF
+-----------------------+
| 세그먼트 FF           |
+-----------------------+

위의 그림과 같이요 ^^;;

한세그먼트는 다시 오프셋으로 쪼개져서 00-FF 의 값을 갖게 되죠

메모리의 주소는 0000 - FFFF 로 나타내어 지는데 세그먼트 두자리 오프셋 두자리

이렇게 표현됩니다. 그래서 도스에서는 포인터가 2바이트입니다. 그래서 64K의 메모리를

가리킬 수 있습니다. 여기서 far 란 무엇이냐.

보통 alloc 나 malloc 로 메모리를 잡으면 현재 세그먼트의 오프셋 영역에 힙 메모리를 잡습니다.

즉 현재 내가 세그먼트 A3 에 있다면 A3 의 오프셋 00 - FF 사이의 영역에 힙메모리를 잡는 것이죠

하지만 far 를 쓰게 되면 다른 세그먼트의 오프셋에 힙메모리를 잡습니다. 이것이 far 의 역할이죠

큰 메모리를 잡고자 할 때 맘 편하게 far 를 사용하면 되는 것이죠.

하지만 32 비트 OS 의 세계에서는 위의 예기는 모두 옛날이야기가 됩니다. 즉 몰라도 된다는 얘기

지요. 현재의 리눅스나 윈도우즈는 32비트 OS 입니다. 32 비트에서는 포인터가 4바이트입니다.

이 얘기는 무슨 얘기일까요? 바로 포인터가 가리킬 수 있는 메로리 영역이 2 의 32 승 즉 4G

가 되는 것입니다. 정말 많지요^^ 한 프로세서가 저렇게 많은 메모리를 넘치게 쓸일은 없을

것입니다. 그래서 웬만한 큰메모리를 잡더라도 메모리를 잡을 수 있는 한계를 벗어날 염려가 없겠지요.

도움이 되었으면 좋겠습니다. 옛날 기억이라 틀린 부분이 있을지도 모르겠습니다 -_-;;

그럼 즐거운 하루 되세요^^;

박순분 님이 쓰신 글 :
: 그래픽 함수의 원형에 있는 'far'라는 키워드에 대하여 자세히 알고 싶습니다.
:
: 예)
: void far initgraph(int far *graphdriver, int far *graphmode, int far *pathtodriver)
:
: 빠른 답변을 기다리며...
: 수고하십시오.
:
:

+ -

관련 글 리스트
251 그래픽 함수의 원형에 있는 'far'라는 키워드에 대하여 설명 좀 부탁해요.... 박순분 3461 2002/01/30
252     Re:그래픽 함수의 원형에 있는 'far'라는 키워드에 대하여 설명 좀 부탁해요.... 김성철 3302 2002/01/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.