You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否获取Vec指针成员所持有的堆内存地址值?

获取Rust中Vec底层指针地址的方法

已知Rust的Vec内部包含长度(length)、容量(capacity)和指向堆内存的指针,它提供了len()和capacity()方法读取前两个值,但没有直接暴露获取指针地址的方法,其实有两种简单的方式可以拿到这个指针的地址值:

  • 使用as_ptr()获取常量指针地址
    as_ptr()是Vec提供的安全方法,会返回一个指向Vec首个元素的*const T类型指针,将其转换为usize类型就能得到对应的内存地址值。示例代码:

    let v = vec![10, 20, 30];
    let data_ptr = v.as_ptr();
    let addr = data_ptr as usize;
    println!("Vec底层数据指针地址: 0x{:x}", addr);
    
  • 使用as_mut_ptr()获取可变指针地址
    如果需要指向可变数据的指针,可以用as_mut_ptr()方法,它会返回*mut T类型的指针,同样可以转换为usize得到地址:

    let mut v = vec![10, 20, 30];
    let mut_data_ptr = v.as_mut_ptr();
    let addr = mut_data_ptr as usize;
    println!("Vec底层可变数据指针地址: 0x{:x}", addr);
    

需要注意的是:这两个方法都不会改变Vec的内部状态,属于安全操作;但当Vec因扩容(比如调用push时内存不足触发重新分配)后,之前获取的指针地址会失效,因为底层内存已经被迁移到新的位置了。

内容的提问来源于stack exchange,提问作者Mandroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:54:52