com*_*tor 3 malloc memory-management rust
我是 Rust 新手,正在研究向量实现。我尝试多次调整向量大小并使用以下代码检查元素的地址:
fn main() {
let mut vector = Vec::new();
for i in 1..100 {
println!(
"Capacity:{}, len: {}, addr: {:p}",
vector.capacity(),
vector.len(),
&vector,
);
vector.push(i);
}
println!("{:p}", &vector[90]);
}
Run Code Online (Sandbox Code Playgroud)
它给了我输出(最后两行):
Capacity:128, len: 98, addr: 0x7ffebe7a6930
addr of 90-element: 0x5608b516bd08
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么第 90 个元素位于另一个内存位置?我想它应该在0x7ffebe7a6930地址附近的某个地方。
是的,Vec将其数据存储在内存的连续部分中。为您提供对堆栈上&vector实际结构的引用,其中包含容量、指针和长度。Vec如果改为打印,vector.as_ptr()那么您应该会得到更有意义的结果。另外,您可能应该在循环中打印之前进行推送,因为理论上该调用push可以在最后一次迭代中重新分配,然后您的指针会显得不同。