我以为我听说D类有两个单词(2 void *)的开销而不是C ++所需的一个单词。我还听说vtable布局与C ++不兼容。我记得没错吗?如果是的话,这些决定的理由是什么?
答案 0 :(得分:6)
一些事情:
Object
继承虚拟函数,因此它始终具有__vptr
开销,但也有__monitor
,C ++类对象不会有。vptr
。 vtable布局与C ++不兼容,因为D包含指向TypeInfo
实例的指针,该实例具有关于类的运行时类型信息。 C ++显然没有这个,所以它是不兼容的。
答案 1 :(得分:4)
额外的指针指向同步类的监视器对象(显然已经讨论过为非同步类删除它但是没有发生)。布局记录在规范的ABI section中。
我不确定vtable布局与C ++编译器的不同之处。其他人可能会回答这个问题。