【发布时间】:2016-08-19 04:20:29
【问题描述】:
是否定义了 D 结构的确切布局?也就是说,以独立于编译器的方式定义的每个成员的确切偏移量?这意味着编译器将被禁止重新排序字段,以实现较小项目的最佳打包并最小化所有偏移量,这取决于您的需要。
【问题讨论】:
标签: layout struct d portability interfacing
是否定义了 D 结构的确切布局?也就是说,以独立于编译器的方式定义的每个成员的确切偏移量?这意味着编译器将被禁止重新排序字段,以实现较小项目的最佳打包并最小化所有偏移量,这取决于您的需要。
【问题讨论】:
标签: layout struct d portability interfacing
D 编译器重新排列结构的成员确实是非法的(尽管它可以 用于类)。重要的是编译器不要为结构重新排列成员,因为结构应该能够用于需要特定内存布局的低级内容。这也是结构需要能够与 C 代码交互的情况,因此它们需要与您在 C 中获得的内容相匹配(至少在使用 extern(C) 时)。因此,结构绝对不会重新排列其成员。此外,您可以通过align attribute 指定成员的对齐方式,因此您可以完全控制结构的布局。
现在,默认布局可能因架构而异(例如,64 位指针比 32 位指针占用更多空间,这将影响结构成员的打包方式),但它应该与您在 C 中获得的内容相匹配在那个架构上。
【讨论】: