3

是否定义了 D 结构的确切布局?也就是说,以独立于编译器的方式定义的每个成员的确切偏移量?这将意味着编译器将(幸运或不幸)根据您的需要被禁止重新排序字段以获得较小项目的最佳打包并最小化所有偏移量。

4

1 回答 1

5

D 编译器重新排列结构的成员确实是非法的(尽管它可以用于类)。重要的是编译器不要为结构重新排列成员,因为结构应该能够用于需要特定内存布局的低级内容。结构也需要能够与 C 代码交互,因此它们需要与您在 C 中获得的内容相匹配(至少在extern(C)使用时)。因此,结构绝对不会重新排列其成员。此外,您可以通过align属性指定成员的对齐方式,因此您可以完全控制结构的布局。

现在,默认布局可能因架构而异(例如,64 位指针比 32 位指针占用更多空间,这将影响结构成员的打包方式),但它应该与您在该架构上的 C 中获得的内容相匹配.

于 2016-08-19T04:48:31.760 回答