是否定义了D结构的确切布局?也就是说,每个成员定义的确切偏移量和以编译器无关的方式?这意味着,幸运或遗憾的是,根据您的需要,编译器将被禁止重新排序字段以获得较小项目的最佳打包并最小化所有偏移。
答案 0 :(得分:5)
D编译器重新排列结构的成员确实是非法的(尽管可以用于类)。编译器不重新排列结构的成员是很重要的,因为结构应该能够用于需要特定内存布局的低级内容。结构也需要能够与C代码交互,因此它们需要匹配您在C中获得的内容(至少在使用extern(C)
时)。因此,结构肯定不会让他们的成员重新排列。此外,您可以通过align
attribute指定成员的对齐方式,这样您就可以完全控制结构的布局。
现在,默认布局可能因架构而异(例如,64位指针比32位指针占用更多空间,这将影响结构成员的打包方式),但它应该与您在C中获得的内容相匹配在那个架构上。