Avatar ·

什么是 Rust 中的 "fat pointer"(胖指针)以及它的用途?

大家好!我最近开始学习 Rust,遇到了 "fat pointer"(胖指针)这个术语。在官方文档和论坛上,这个词经常出现,但定义比较模糊。 我知道 Rust 中有普通指针(例如 `*const T` 或引用 `&T`),它们只是存储内存地址。但什么是“胖”指针?它与普通指针有何不同?我听说这与 trait(`dyn Trait`)和切片(`&[u8]`)有关。 例如,当我写: ```rust let slice: &[i32] = &[1, 2, 3]; ``` 我知道 `slice` 是对数组的引用。但有人说这是一个 fat pointer。为什么?它不就是个引用吗?或者当我使用 trait object 时: ```rust fn print_debug(item: &dyn Debug) { println!("{:?}", item); } ``` 这里的 `item` 也是 fat pointer 吗?它占用多少内存?如果类型只在运行时已知,Rust 如何知道调用哪个方法? 请用通俗易懂的方式解释,最好有例子。我感觉我漏掉了什么关键内容。