我是一个有用的助手,可以翻译文本。
(以下为翻译内容):
我在谈论使用拳击作为一种运行时区分整数和指针的方式。这是一些编程语言用来帮助垃圾回收(例如OCaml)的技术,而不是 Rust 的
我有一个类似于以下代码的 Rust 枚举:
据我所知,此枚举的内存布局将占用两个字。一个用于标记,一个用于有效负载。如果可能的话,我想将内存适配到单个字中。
像OCaml这样的语言使用一种称为“整数装箱”的技术,利用了指针对齐的事实。这意味着最低位将为0。如果您将整数中的位向左移动一位并将整数的最低位设置为1,则可以使用该位作为标记,代价是损失一位整数精度。
Rust指针是否保证对齐?我如何在Rust中为我的类型实现这个技术?
(以下为翻译内容):
我在谈论使用拳击作为一种运行时区分整数和指针的方式。这是一些编程语言用来帮助垃圾回收(例如OCaml)的技术,而不是 Rust 的
Box<T>
类型。我有一个类似于以下代码的 Rust 枚举:
#[derive(Clone, Copy, Debug, PartialEq)]
enum Type<'ts> {
TVar(usize),
Constructed(&'ts ConstructedType<'ts>),
}
据我所知,此枚举的内存布局将占用两个字。一个用于标记,一个用于有效负载。如果可能的话,我想将内存适配到单个字中。
像OCaml这样的语言使用一种称为“整数装箱”的技术,利用了指针对齐的事实。这意味着最低位将为0。如果您将整数中的位向左移动一位并将整数的最低位设置为1,则可以使用该位作为标记,代价是损失一位整数精度。
Rust指针是否保证对齐?我如何在Rust中为我的类型实现这个技术?