근거리 및 원거리 포인터
일반 포인터(우리가 일반적으로 사용하는 포인터), 근접 포인터 및 원거리 포인터 간의 차이점은 무엇이며 현재 C/C++ 시스템에서 근접 및 원거리 포인터에 대한 실용적인 사용이 있습니까?다른 c,c++ 의미가 아닌 이러한 특정 포인터를 사용해야 하는 실제 시나리오는 매우 유용할 것입니다.
near 키워드와 far 키워드는 Intel이 이전에 가지고 있던 세그먼트 메모리 모델에서 기원합니다.근접 포인터는 원래 세그먼트라고 불리는 64Kb 크기의 메모리 블록에만 액세스할 수 있는 반면, 원거리 포인터는 해당 세그먼트에서 세그먼트와 오프셋으로 구성된 범위를 벗어날 수 있습니다.근접 포인터는 원거리 포인터보다 훨씬 빨랐기 때문에 일부 컨텍스트에서는 사용에 대한 보상을 받았습니다.
가상 메모리가 있는 요즘은 포인터가 가까이 있고 멀리 있는 것이 아무 소용이 없습니다.
편집:제가 올바른 용어를 사용하지 않았다면 미안하지만, 제가 예전에 그것을 작업할 때 이렇게 기억했습니다:-)
머신 아키텍처(x86, x64, 640kb + 메모리 모델, x32는 보호 모드 및 세그먼트, x86은 세그먼트 메모리)의 맥락에서 사용됩니다.
예: 32비트 "긴" 주소 지정 및 8비트 상대 주소 지정이 가능한 시스템입니다.상대적 거리는 전진(양의 값) 또는 이전(음의) 방향으로 최소 127바이트를 허용합니다.대상이 1024바이트 떨어져 있으면 전체 32비트 포인터를 사용해야 합니다.
요즘은 x86 x32 주소 지정만 가능합니다. 긴 포인터와 x64 64비트 주소 지정은 영구적입니다.예, 윈도우의 x64는 MS VC가 x86 x32 애플리케이션이 4Gb의 메모리를 사용하는 것처럼 "인식"하여 컴파일합니다.따라서 기본적으로 가까운 주소와 먼 주소 또는 다른 주소의 차이를 알 수 없습니다.그러나 x64 대상은 다른 긴 유형의 포인터를 사용하여 메모리 주소를 지정할 수 있습니다.
보시다시피 MS VC에는 다양한 포인터에서 x32를 통한 x64 어드레싱의 변형을 "확인"하지 않으면 실제 시나리오가 없습니다.그냥 가설일 뿐입니다.
이러한 실용적인 사용은 LP_STRING - 문자열을 향한 긴 포인터와 INT_PTR - 포인터 값을 보유한 정수입니다.
먼저 CPU와 컴파일러가 사용할 포인터 크기 집합을 수락한다는 것을 이해해야 합니다.그리고 그들만.추가 컴파일러/링커/하드웨어 없이는 해결 방법을 찾을 수 없습니다.INT_PTR - 길이가 int를 초과하지 않는 포인터(포인터 길이가 int보다 크지 않은 포인터 값)를 저장하기 위한 것입니다.그리고 LP_STRING은 컴파일러/프로세서의 긴 유형의 포인터일 뿐입니다(추상을 좋아하고 컴파일러와 동작이 동일하지 않을 뿐만 아니라 x64는 Intel에서 거의 사용되지 않는 AMD일 수 있습니다).
모든 크기의 변수는 포인터가 될 수 있습니다.
AMD x64 및 LLP(긴 길이 포인터)에 대한 실용적인 예만 있으면 됩니다.
언급URL : https://stackoverflow.com/questions/3869830/near-and-far-pointers
'programing' 카테고리의 다른 글
두 테이블을 비교하고 경기를 건너뛰는 방법은 무엇입니까? (0) | 2023.06.15 |
---|---|
Python - Excel 파일의 열 너비를 자동으로 조정합니다. (0) | 2023.06.15 |
시스템JS와 함께 TypeScript에서 momentjs를 어떻게 사용합니까? (0) | 2023.06.15 |
MySQL/Maria에서만 명령을 프로시저로 제한DB (0) | 2023.06.15 |
typescript tserver는 무엇에 관한 것입니까? (0) | 2023.06.15 |