간단한 VM을 작성 중이며 개체 및 구조 멤버 액세스를 구현하는 데 질문이 있습니다.개체 및 구조체 멤버 액세스 및 주소 오프셋 계산
프로그램의 시작 주소는 각 실행마다 임의적이므로 이후에 각 개체의 주소도 임의로 지정됩니다.
따라서 개체 나 개체 개체에 액세스하는 유일한 방법은 "기본"포인터에서 오프셋에 액세스하는 것입니다. 즉, 프로그램 구조에서 아무 것도 액세스하지 않아도되는 산술 연산이 필요합니다.
제 질문은이 방법이 전문 컴파일러에서 수행되었는지 여부입니다. 분명히이 접근법은 런타임에 약간의 오버 헤드를 추가하기 때문에 런타임에서이 프로세스를 오프로드하는 방법을 생각할 수 없습니다. 메모리 할당과 그 주소의 일관성에 대한 보장 부족?
감사합니다. 이 메커니즘 플랫폼 특정 또는 아마도 표준화 된 휴대용 솔루션이 있습니까? 이 기능을 활용하는 방법에 대한 정보 링크를 제공 할 수 있습니까? 아니면 C/C++ 구현입니까? – dtech
@ddriver 주소 지정 모드는 CPU에 따라 다릅니다. C/C++ 프로그래머는 C/C++ 프로그래머가 직접 사용할 수 없습니다. 컴파일러는 코드를 어셈블리로 변환하는 동안 코드를 활용합니다 (배열 인덱싱은 적어도 PDP-11 일 이후 기본 + 오프셋으로 수행되었습니다). 예를 들어,'int * p = getPointer(); int x = * (p + 5)'를 사용하면 대부분의 컴파일러는 int의 크기로 5를 곱하거나 곱하기를 포함하지 않는 매우 효율적인 액세스를 생성합니다. "기본 + 오프셋"주소 지정을 수행하려면 단일 CPU 명령이 실행됩니다. – dasblinkenlight