我想我听说 D 类有两个字(2 void*)的开销,而不是 C++ 要求的一个字。我还听说 vtable 布局与 C++ 不兼容。我记错了吗?如果是这样,这些决定的理由是什么?
问问题
220 次
2 回答
6
一些东西:
- 在 C++ 中,没有虚函数的类的开销为零。
- 在 D 中,一个类总是从 继承虚函数
Object
,所以它总是有这个__vptr
开销,但也有一个__monitor
,而 C++ 类对象没有。 - 在 C++ 和 D 中,
vptr
类实现的每个接口都会有额外的。
vtable 布局与 C++ 不兼容,因为 D 包含一个指向TypeInfo
实例的指针,该实例具有关于类的运行时类型信息。C++ 显然没有,所以它是不兼容的。
于 2012-07-29T09:45:12.610 回答
4
额外的指针指向同步类的监视器对象(显然已经讨论过为非同步类删除它,但还没有发生)。布局记录在规范的ABI 部分。
我不确定 vtable 布局与 C++ 编译器的不同之处。其他人可能可以回答这个问题。
于 2012-07-28T20:35:33.837 回答