Struct 如何在填充结构时发出警告/出错?

Struct 如何在填充结构时发出警告/出错?,struct,rust,padding,Struct,Rust,Padding,在某些特殊情况下,可能需要不填充结构(例如,确保结构的内存不包含未初始化的字节) 虽然可以使用#[repr(packed)],但这意味着您可能有一些成员的访问权限没有最佳对齐 在C语言中,一些软件使用手动填充,其中GCC的-Wpadded可用于警告是否填充了结构 填充结构时是否有方法警告/出错? 或者某种方法来确保手动填充的结构没有任何填充 我能想到的最接近这一点的方法是定义结构两次,打包一次,然后检查大小是否不同,但这是一个难题 仔细使用include可能可以避免实际写入结构两次,但这仍然是

在某些特殊情况下,可能需要不填充结构(例如,确保结构的内存不包含未初始化的字节)

虽然可以使用
#[repr(packed)]
,但这意味着您可能有一些成员的访问权限没有最佳对齐

在C语言中,一些软件使用手动填充,其中GCC的
-Wpadded
可用于警告是否填充了结构

填充结构时是否有方法警告/出错?
或者某种方法来确保手动填充的结构没有任何填充


我能想到的最接近这一点的方法是定义结构两次,打包一次,然后检查大小是否不同,但这是一个难题


仔细使用
include
可能可以避免实际写入结构两次,但这仍然是最后的手段。

这意味着您可能会有一些成员在访问时没有最佳对齐。=>我在最新x86_64处理器上的测试表明,对于未对齐的访问不再有惩罚;尽管未对齐的SIMD类型可能仍然存在问题。尽管我意识到我可以打包所有结构,但我不想尝试将我的软件移植到另一个平台,并遇到一些性能问题,因为打包对于我当前使用的平台来说并不重要。要做到这一点并不难,正如问题中所述,有些方式已经存在,只是没有那么好;因此,在任何情况下,移植都可能是一个问题。您的要求是严格要求没有未初始化的字节,还是出于其他原因也要警告填充?(两人的答案可能大不相同)@matthieu-m,我怀疑我为什么不想要填充超出了问题的范围,这会导致一个过于特殊的答案。如果锈不能做到这一点,或者如果我建议的乱七八糟是唯一的办法。。。(不使用不稳定的功能)。那么最好回答这不受支持。您可以编写一个lint来检查填充类型的
布局。