D类的开销

  • 本文关键字:开销 class d overhead
  • 更新时间 :
  • 英文 :


我听说D类有两个单词(2个void*)的开销,而不是C++所需的一个单词。我还听说vtable布局与C++不兼容。我记对了吗?如果是,做出这些决定的理由是什么?

几件事:

  1. 在C++中,没有虚拟函数的类将有开销
  2. 在D中,类总是从Object继承虚拟函数,所以它总是有__vptr的开销,但也有一个__monitor,而C++类对象没有
  3. 在C++和D中,类实现的每个接口都将有额外的vptr

vtable布局与C++不兼容,因为D包含指向TypeInfo实例的指针,该实例具有有关类的运行时类型信息。C++显然没有,所以它是不兼容的。

额外的指针指向同步类的监视器对象(显然有人讨论过为未同步类删除它,但这并没有发生)。布局记录在规范的ABI部分

我不确定vtable布局与C++编译器的不同之处。其他人可能会回答这个问题。

相关内容

  • 没有找到相关文章

最新更新