是否定义了D结构的确切布局?

Cec*_*ard 3 layout portability struct d interfacing

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

Jon*_*vis 5

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

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