D类的开销

Qwe*_*tie 1 d class overhead

我以为我听说D类有两个单词(2 void*)的开销而不是C++所需的一个单词.我还听说vtable布局与C++不兼容.我记得没错吗?如果是的话,这些决定的理由是什么?

Pet*_*der 6

一些东西:

  1. 在C++中,没有虚函数的类将具有开销.
  2. 在D中,类总是从中继承虚函数Object,因此它总是有__vptr开销,但也有一个__monitorC++类对象没有的.
  3. 在C++和D中,vptr类实现的每个接口都会有额外的内容.

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

  • 必须同意@FeepingCreature,如果这些4或8个字节确实有所不同,那么你可能创建了太多的类实例.利用批量效率并将多个实例合二为一. (2认同)