有没有办法从稳定的 Rust 上的未对齐地址读取 volatile 值?

Is there a way to read a volatile value from an unaligned address on stable Rust?

我想获取 ACPI 的 XSDT。获取 table 需要易失性访问。此外,header 或条目可能不是 well-aligned,因为 header 大小为 36 字节,而所需的对齐为 8 字节。所以,我想要一个从未对齐地址读取易失值的函数。 read_volatile requires a well-aligned address. Rust also provides unaligned_volatile_load,但我不想使用任何夜间功能,因为它们的行为经常变化。有没有办法在 stable Rust 上做到这一点?

由于 header 只有 36 个字节,您可以使用 std::ptr::read_volatile 以最小的开销将其复制到 [u8; 36]。从那里你可以使用不需要每晚的std::ptr::read_unaligned

如果您最关心每晚构建的变化,您也可以选择一个特定的每晚构建并坚持使用它,这样它至少是一致的,例如:

rustup install nightly-2021-08-09