求问[T; N] 和 &[T] 的指针大小?
💡
原文中文,约800字,阅读约需2分钟。
📝
内容提要
本文讨论了[T; N]和[T]之间的区别,以及数组指针和切片指针的大小。作者发现数组和切片使用相同的代码获取长度,但数组指针的大小为8而不是16。作者希望得到解答。
🎯
关键要点
-
[T; N] 是一种在编译期已知且长度不变的数组类型,长度 N 是类型的一部分。
-
[T] 的长度在编译期不可知,不满足 Sized trait,因此通常使用 &[T] 来指向 [T]。
-
胖指针(fat pointer)不仅包含数据地址,还保存长度信息。
-
在代码示例中,数组指针大小为 8 字节,而切片指针大小为 16 字节,符合胖指针的特性。
-
array.len() 和 slice.len() 都调用相同的实现,疑问在于为什么数组指针大小为 8 而不是 16。
➡️