【问题标题】:Does struct field declaration order matter in Rust?结构字段声明顺序在 Rust 中是否重要?
【发布时间】:2019-12-11 13:58:54
【问题描述】:

我知道在 C 语言中不允许编译器重新排序结构字段,这对结构的内存布局和对齐很重要。

我是 Rust 的初学者,因为如果允许 rustc 从它们在结构中声明的顺序重新排序字段,那么大部分原始指针似乎是隐藏的(我知道你仍然可以使用它们)。

【问题讨论】:

  • 我的猜测是否定的,因为 unsafe 代码仍然可以看到差异,并且您需要特定的布局来与用其他语言编写的函数交互,Rust 支持链接。但我对 Rust 还不够熟悉,无法确定。
  • 与 C 中不同,Rust 结构字段的顺序不能保证,除非它是 repr(C)。阅读更多here

标签: c memory struct rust


【解决方案1】:

来自rust reference struct.md

struct 的内存布局默认情况下未定义,以允许编译器优化,如字段重新排序,但可以使用repr 属性进行修复。在任何一种情况下,字段都可以在相应的结构表达式中以任何顺序给出;生成的 struct 值将始终具有相同的内存布局。

【讨论】:

  • 您能否也提及repr(C),在这种情况下,字段顺序确实很重要?我认为这是一个重要的细节。
  • ?它就在引用 but it [the memory layout of a struct] can be fixed with the repr attribute
  • 是的,我看到了,但我认为明确解释 repr(C) 仍然是有益的。我也认为引文中的第二句话有点令人困惑:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2023-03-23
  • 2022-11-21
相关资源
最近更新 更多