문제

D 클래스에는 C++에서 요구하는 한 단어 대신 두 단어(2 void*)의 오버헤드가 있다고 들은 것 같습니다.또한 vtable 레이아웃이 C++와 호환되지 않는다고 들었습니다.내가 정확히 기억하고 있는 걸까?그렇다면 이러한 결정의 근거는 무엇입니까?

도움이 되었습니까?

해결책

몇 가지:

  1. C++에서 가상 함수가 없는 클래스는 간접비.
  2. D에서 클래스는 항상 가상 함수를 상속받습니다. Object, 그래서 항상 그런 식이죠 __vptr 오버헤드도 있지만 __monitor, C++ 클래스 객체에는 없습니다.
  3. C++와 D 모두에서 추가 기능이 있습니다. vptr 클래스가 구현하는 각 인터페이스에 대해.

D에 포인터가 포함되어 있으므로 vtable 레이아웃은 C++와 호환되지 않습니다. TypeInfo 클래스에 대한 런타임 유형 정보가 있는 인스턴스입니다.C++에는 분명히 그런 기능이 없으므로 호환되지 않습니다.

다른 팁

추가 포인터는 동기화 된 클래스의 모니터 오브젝트에 대한 것입니다 (비동기 클래스에 대해 제거하는 것에 대해 분명히 말하지 만 발생하지 않았지만 일어나지 않았습니다).레이아웃은 ABI 섹션

에 문서화되어 있습니다.

VTABLE 레이아웃이 C ++ 컴파일러가 어떻게 작동하는지 모르겠습니다.다른 사람은 아마 그 대답 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top