Class D类的开销 我想我听说D类有两个字(2空缺)的开销,而不是一个字所要求的C++。我还听说VTALE布局与C++不兼容。我记得对吗?如果是这样的话,这些决定的理由是什么?

Class D类的开销 我想我听说D类有两个字(2空缺)的开销,而不是一个字所要求的C++。我还听说VTALE布局与C++不兼容。我记得对吗?如果是这样的话,这些决定的理由是什么?,class,d,overhead,Class,D,Overhead,额外的指针指向同步类的监视器对象(显然有人谈论过要为非同步类删除它,但这并没有发生)。该布局记录在规范的附录中 我不确定VTABLE布局如何与C++编译器如何不同。其他人可能会回答。额外的指针是指向同步类的监视器对象(显然有人讨论过为未同步类删除它,但没有发生)。该布局记录在规范的附录中 我不确定VTABLE布局如何与C++编译器如何不同。其他人可能会回答这个问题。有几件事: 在C++中,没有虚拟函数的类将具有零开销。 在d中,类总是从对象> /Class >继承虚拟函数,所以总是有那个、yvp

额外的指针指向同步类的监视器对象(显然有人谈论过要为非同步类删除它,但这并没有发生)。该布局记录在规范的附录中


我不确定VTABLE布局如何与C++编译器如何不同。其他人可能会回答。

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

我不确定VTABLE布局如何与C++编译器如何不同。其他人可能会回答这个问题。

有几件事:

  • 在C++中,没有虚拟函数的类将具有零开销。 在d中,类总是从对象> /Class >继承虚拟函数,所以总是有那个<代码>、yvptrt/c>开销,而且还有一个<代码> >监视器< /Cl>,C++类对象没有。< /LI>
  • 在C++和D中,对于类实现的每个接口,将有附加的<代码> VPTR < /代码>。 <> Pv>布局与C++不兼容,因为D包含指向<代码> TypeInfo < /Calp>实例的指针,该实例具有关于类的运行时类型信息。C++显然没有这个,所以它是不兼容的。

    < P> >以下几点:

  • 在C++中,没有虚拟函数的类将具有零开销。 在d中,类总是从对象> /Class >继承虚拟函数,所以总是有那个<代码>、yvptrt/c>开销,而且还有一个<代码> >监视器< /Cl>,C++类对象没有。< /LI>
  • 在C++和D中,对于类实现的每个接口,将有附加的<代码> VPTR < /代码>。
    <> Pv>布局与C++不兼容,因为D包含指向<代码> TypeInfo < /Calp>实例的指针,该实例具有关于类的运行时类型信息。C++显然没有这个,所以它是不兼容的。

    不需要它被“听到”——源在那里,去看看你自己。如果这是你的事情,克隆git回购协议,花上几个小时去迷惑超过100000行的源代码,希望找到一个简单问题的答案,当然。至于我,我只想问是否有人已经知道答案:)没有必要“听到”-来源在那里,你自己去看看。:)如果这是你的事情,克隆git回购协议,花上几个小时去迷惑超过100000行的源代码,希望找到一个简单问题的答案,当然。至于我,我只想问一下是否有人已经知道答案:)只是为了澄清一下,通过使用结构并使用
    别名this
    模拟继承,您可以在D中获得零开销对象,而不使用虚拟函数,通过使用structs并使用
    别名this
    来模拟继承,您可以在D中获得没有虚拟函数的零开销对象。值得一提的是,您可以使用extern(C++)来构建兼容的vtable。也许还应该说,D中的结构可以在不需要开销的情况下使用。好吧,我当然希望D开发人员改变这个实现。为什么非同步类会有一个“监视器”?此外,虽然C++类没有这个Type信息THIGIE,但它不必阻止C++调用D虚拟函数,反之亦然:只要将Type信息放置在VPTR(-1)中,它就不会妨碍。有人说要从对象中消除opCmp、opEqual等;希望他们会考虑在同一时间添加C++二进制兼容性,至少对于简单的情况。(是的,有extern(C++),但是默认情况下兼容性的缺点是什么?)基本上,如果你发送的对象数量足够多,以至于四个字节会产生影响,那么你的设计就有问题了。D具有POD类型的结构。另外,C++本身是否是向后兼容性下降的充分教训?必须同意@ FEPEGIONIONG,如果这4个或8个字节真的产生了差异,那么你可能会创建太多的类实例。利用批量效率并将多个实例合并为一个实例。值得一提的是,您可以使用extern(C++)构建兼容的vtable。也许还应该说,D中的结构可以在不需要开销的情况下使用。好吧,我当然希望D开发人员改变这个实现。为什么非同步类会有一个“监视器”?此外,虽然C++类没有这个Type信息THIGIE,但它不必阻止C++调用D虚拟函数,反之亦然:只要将Type信息放置在VPTR(-1)中,它就不会妨碍。有人说要从对象中消除opCmp、opEqual等;希望他们会考虑在同一时间添加C++二进制兼容性,至少对于简单的情况。(是的,有extern(C++),但是默认情况下兼容性的缺点是什么?)基本上,如果你发送的对象数量足够多,以至于四个字节会产生影响,那么你的设计就有问题了。D具有POD类型的结构。另外,C++本身是否是向后兼容性下降的充分教训?必须同意@ FEPEGIONIONG,如果这4个或8个字节真的产生了差异,那么你可能会创建太多的类实例。利用批量效率,将多个实例合并为一个实例。