class foo { }
writeln(foo.classinfo.init.length); // = 8 bytes
Run Code Online (Sandbox Code Playgroud)
class foo { char d; }
writeln(foo.classinfo.init.length); // = 9 bytes
Run Code Online (Sandbox Code Playgroud)
d实际上是在那8个字节中存储任何东西,如果是,那么什么?这似乎是一个巨大的浪费,如果我只是包装一些值类型,那么该类显着膨胀程序,特别是如果我使用了很多.char变为8倍,而int变为3倍.
struct的最小大小为1个字节.
在D中,对象有一个包含2个指针的标题(因此根据您的体系结构,它可能是8字节或16字节).
第一个指针是虚方法表.这是一个由填充了函数指针的编译器生成的数组,因此可以进行虚拟调度.同一类的所有实例共享相同的虚方法表.
第二个指针是监视器.它用于同步.它不确定这个字段永远留在这里,因为D强调本地存储和不变性,这使得许多对象上的同步变得毫无用处.由于此字段比这些功能旧,它仍然在这里并且可以使用.但是,它可能会在未来消失.
对象上的这种标题非常常见,例如,您可以在Java或C#中找到相同的标题.您可以在此处查看更多信息:http://dlang.org/abi.html
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |