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

Is the exact layout of D structs defined?

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

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

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