추상 수준에서는 디자인하려는 언어로 원하는 것을 포함 할 수 있습니다.
구현 수준에서는 이러한 것들 중 일부는 구현하기가 더 쉽고, 일부는 복잡하고, 일부는 빨라질 수 있으며, 일부는 느려질 수밖에 없습니다. 이를 설명하기 위해 설계자들은 종종 어려운 결정과 타협을해야합니다.
구현 수준에서 변수에 액세스하는 가장 빠른 방법 중 하나는 주소를 찾고 해당 주소의 내용을로드하는 것입니다. 대부분의 CPU에는 주소에서 데이터를로드하기위한 특정 명령어가 있으며 이러한 명령어는 일반적으로로드해야하는 바이트 수 (1, 2, 4, 8 등)와로드 할 데이터를 배치 할 위치 (단일 레지스터, 레지스터)를 알아야합니다. 쌍, 확장 레지스터, 기타 메모리 등). 변수의 크기를 알면 컴파일러는 해당 변수의 사용법을 위해 어떤 명령어를 생성해야하는지 정확하게 알 수 있습니다. 변수의 크기를 알지 못하면 컴파일러는 더 복잡하고 느린 것에 의존해야합니다.
추상 수준에서 하위 유형 지정 지점은 동일하거나 더 일반적인 유형이 필요한 한 유형의 인스턴스를 사용할 수 있어야합니다. 다시 말해, 정확히 이것이 무엇인지 미리 알지 못하고 특정 유형의 객체 또는 더 파생 된 것을 기대하는 코드를 작성할 수 있습니다. 또한 파생 형식이 많을수록 더 많은 데이터 멤버를 추가 할 수 있으므로 파생 형식은 반드시 기본 형식과 동일한 메모리 요구 사항을 가질 필요는 없습니다.
구현 수준에서는 미리 결정된 크기의 변수가 알 수없는 크기의 인스턴스를 보유하고 일반적으로 효율적인 호출 방식으로 액세스 할 수있는 간단한 방법은 없습니다. 그러나 물건을 조금 움직이고 변수를 사용하여 객체를 저장하는 것이 아니라 객체를 식별하고 객체를 다른 곳에 저장하는 방법이 있습니다. 그러한 방법은 참조 (예 : 메모리 주소)입니다. 즉, 정보를 통해 객체를 찾을 수있는 한 변수가 특정 크기의 고정 크기 정보 만 보유하면되는 추가 수준의 간접적 수준입니다. 이를 위해서는 주소 (고정 크기) 만로드하면 알 수있는 오프셋에 더 많은 데이터가 있어도 유효한 것으로 알려진 개체의 오프셋을 사용하여 평소대로 작업 할 수 있습니다. 우리는 그렇게 할 수 있기 때문에
추상 수준에서,이 방법은 당신이 (A 참조) 저장할 수 있습니다 string
에 object
그것을 만드는 정보를 잃지 않고 변수를 string
. 모든 유형이 이와 같이 작동하는 것이 좋으며 여러 측면에서 우아하다고 말할 수도 있습니다.
그럼에도 불구하고 구현 수준에서 추가 수준의 간접 지침에는 더 많은 명령이 포함되며 대부분의 아키텍처에서는 개체에 대한 각 액세스가 다소 느려집니다. 언어에 여분의 간접 레벨 (참조)이없는 일반적으로 사용되는 유형을 포함 시키면 컴파일러가 프로그램에서 더 많은 성능을 끌어낼 수 있습니다. 그러나 해당 수준의 간접 성을 제거함으로써 컴파일러는 더 이상 메모리에 안전한 방식으로 하위 유형을 지정할 수 없습니다. 유형에 더 많은 데이터 멤버를 추가하고 더 일반적인 유형에 지정하면 대상 변수에 할당 된 공간에 맞지 않는 추가 데이터 멤버가 분리되기 때문입니다.