source

긴 포인터가 무엇입니까?

nicesource 2023. 7. 8. 10:59
반응형

긴 포인터가 무엇입니까?

책을 읽고 있는데 어떤 자료형이 긴 포인터라고 나와 있습니다.그게 무슨 뜻인지 궁금할 뿐이에요감사해요.

일부 프로세서에는 근접 포인터와 원거리 포인터의 두 가지 유형의 포인터가 있습니다.근접 포인터는 원거리 포인터보다 좁습니다(따라서 범위가 제한됨).먼 포인터는 긴 포인터일 수도 있습니다.

일부 프로세서는 근처에 있는 것들에 대한 상대적 주소 지정을 제공합니다.긴 포인터는 항목이 근처에 있지 않으며 상대 주소 지정을 사용할 수 없음을 나타낼 수 있습니다.

어쨌든 긴 포인터는 플랫폼별 문제이므로 다른 OS나 플랫폼으로 이동할 수 없습니다.

편집: (상대 주소 지정에 대한 자세한 설명 및 사용)

주소 거리는 고급 개념이 아니라 어셈블리 언어 개념에 가깝습니다.거리는 프로그램 카운터(현재 주소 또는 다음 주소)와 객체(함수 또는 데이터)의 시작점에서 측정됩니다.위치가 작은 상대 포인터의 제한보다 클 경우 더 긴 포인터가 필요합니다.

예: 32비트 "긴" 주소 지정 및 8비트 상대 주소 지정이 가능한 시스템입니다.상대적 거리는 전진(양의 값) 또는 이전(음의) 방향으로 최소 127바이트를 허용합니다.대상이 1024바이트 떨어져 있으면 전체 32비트 포인터를 사용해야 합니다.

이것은 대부분의 명령어와 데이터가 근처에 있다는 개념에 기반한 최적화 기능입니다.대부분의 루프는 루프 시작과 루프 끝 사이의 거리가 작습니다.실행을 위해 상대 주소 지정을 사용합니다.

데이터 상수 또는 변수에 관계없이 대부분의 데이터가 근처에 있습니다.자세한 내용은 데이터가 프레임 또는 기준점 근처에 있습니다.로컬 변수는 프레임 또는 기본 주소와 관련하여 스택에 배치됩니다.이 기본 주소는 함수가 실행되기 전 스택의 시작입니다.따라서 스택 프레임 시작과 관련된 주소 지정을 사용하여 데이터에 액세스할 수 있습니다.

프로세서를 통해 컴파일러는 상대적(근접) 주소 지정을 위한 특수 명령을 사용할 수 있습니다.대부분의 프로세서에서 상대 주소 지정을 사용하는 명령은 긴 주소 지정을 사용하는 명령보다 작습니다.따라서 프로세서는 명령 캐시에서 더 적은 가져오기를 필요로 하며 명령 캐시는 더 많은 명령을 저장할 수 있습니다.

긴 주소와 짧은 주소, 가까운 주소와 먼 주소는 데이터 또는 기능의 범위에 따라 달라질 수 있습니다.PIC(위치 독립 코드), 가상 메모리 및 페이징과 같은 다른 요소가 관련되어 있습니다.

책이 얼마나 오래되었는지에 따라, 그것은 두 개의 다른 "크기" 포인터가 있는 세그먼트 아키텍처를 언급할 수 있습니다. 로컬 세그먼트를 가리키는 근접 포인터(그리고 16비트에 끼워질 수 있음)와 다른 세그먼트를 가리킬 수 있는 멀리 또는 긴 포인터(따라서 더 컸음).이것이 Win32 API에서 LPVOID와 같은 유형을 볼 수 있는 이유입니다. LPVOID는 "공백을 위한 긴(먼) 포인터", 즉 메모리의 아무 곳에나 포인터입니다.

LP와 NP의 사용은 Win16과 당시의 세분화된 프로세서 아키텍처에서 비롯된 것입니다.평평한 가상 주소 공간이 있는 현대의 Windows에서 근거리 및 원거리 포인터는 일반적으로 고고학적으로만 관심이 있습니다. 포인터는 한 가지 종류뿐이며 "근거리" 및 "긴/먼" 한정자는 무시할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2315311/what-is-a-long-pointer

반응형