一、&

    println!();let temp = 500_i32;   //stackprintln!("&temp               : {:p}", &temp);println!("&&temp              : {:p}", &&temp);println!("&&&temp             : {:p}", &&&temp);println!("&&&&temp            : {:p}", &&&&temp);let arr = vec!["a", "b", "c", "d"]; // heap println!();println!("&arr                : {:p}", &arr);println!("&&arr               : {:p}", &&arr);println!("&&&arr              : {:p}", &&&arr);println!("&&&&arr             : {:p}", &&&&arr);

output:

二、原始数据及clone

//原始数据
let mut array: [&str; 4] = ["a", "b", "c", "d"];
let mut num = 5_f32;
//clone
let array_clone = array.clone(); //clone:address和原来的不一样
let num_clone = num.clone();//clone:address和原来的不一样

三、不同情况下array的address

println!("&array address          :{:p}", &array);println!("&array_clone address    :{:p}", &array_clone);let array_new = &mut array;// address不发生变化let array_new_clone = array_new.clone(); //address发生变化println!("array_new address       :{:p}", array_new);println!("&array_new address      :{:p}", &array_new);println!("&array_new_clone address:{:p}", &array_new_clone);println!();

四、不同情况下num的address

//&
println!("&num address            :{:p}", &num);
println!("&num_clone address      :{:p}", &num_clone);
//&mut,clone
let num_new = &mut num; // address不发生变化
let num_new_clone = num_new.clone();// address发生变化
// output
println!("num_new address         :{:p}", num_new);
println!("&num_new address        :{:p}", &num_new);
println!("&num_new_clone address  :{:p}", &num_new_clone);

output:

五、Box

    let mut bx = Box::new(5_f32);let mut bx_new = &bx;let mut bx_new_clone = bx_new.clone();println!("bx <value> address  : {:p}", &*bx);//box中5_f32的地址println!("bx address          : {:p}", &bx);//指针的指针println!("bx_new address      : {:p}", &bx_new);println!("bx_new_clone address: {:p}", &*bx_new_clone);

output:

六、Arc

以下例子参考RustPrimer

use std::thread;
use std::sync::Arc;fn main() {let var : Arc<i32> = Arc::new(5);let share_var = var.clone();// 创建一个新线程let new_thread = thread::spawn(move|| {println!("share value in new thread: {}, address: {:p}", share_var, &*share_var);});// 等待新建线程先执行new_thread.join().unwrap();println!("share value in main thread: {}, address: {:p}", var, &*var);
}

output:

share value in new thread: 5, address: 0x2825070
share value in main thread: 5, address: 0x2825070

Rust: ,clone,Box,Arc 的address相关推荐

  1. Rust中Box、Rc、Arc、Cell、RefCell、Cow简介

    一.Box 是一种独享所有权智能指针,类似C++的unique_ptr 资源分配在堆上,依靠Deref和Drop来管理堆上的资源,零运行时开销,是最常用的套娃. Box::new(v): 创建,移动语 ...

  2. Rust中的引用计数Arc与Rc

    Rc 单线程引用计数.不是线程安全的,如果需要线程间引用计数可用Arc.注意他们之间的实现区别.关键源码实现如下,重点可关注Clone和Drop的实现细节. //! Single-threaded r ...

  3. Rust 中的指针:Box、Rc、Cell、RefCell

    Rust 中的指针:Box.Rc.Cell.RefCell 作者:许野平 2022-02-21 Rust 自身具有 &.* 操作符,可以实现变量引用和解引用.为什么又搞出这几个类型的指针呢?原 ...

  4. Rust for Linux 源码导读 | Ref 引用计数容器 原创

    引子 2022 年,我们很可能会看到 Linux 内核中的实验性 Rust 编程语言支持成为主流.2021.12.6 早上发出了更新的补丁,介绍了在内核中处理 Rust 的初始支持和基础设施. 这次更 ...

  5. Rust语言Ownership,Reference和Lifetime详解

    Ownership References and Borrowing Lifetime 1. Ownership rust的ownership系统是它区别与其它语言的最主要的特征.只有理解了owner ...

  6. 丅rust是什么意思_中文版《Rust标准库》来了

    ==================================== ==================================== Rust标准库是可移植Rust软件的基础,Rust软 ...

  7. 这一天,我用 Rust 重写了已有 19 年历史的 C++ 库!

    从版本 56 开始,Firefox 浏览器支持一种新的字符编码转换库,叫做 encoding_rs.它是用 Rust 编写的,代替了从 1999 年就开始使用的 C++ 编写的字符编码库 uconv. ...

  8. Rust FFI 与C语言互相调用

    Rust FFI 与C语言互相调用 参考 cbindgen 简介 二进制方式构建 脚本构建 Demo程序说明 示例工程: makefile test脚本 基本数据类型 Rust侧 C侧 对象 Rust ...

  9. 数据竞争(data race)问题分析的利器——valgrind的Helgrind

    数据竞争(data race)是指在非线程安全的情况下,多线程对同一个地址空间进行写操作.一般来说,我们都会通过线程同步方法来保证数据的安全,比如采用互斥量或者读写锁.但是由于某些笔误或者设计的缺陷, ...

  10. 微软MSIT部门招Sr SDE for FSS team

    Job Description: Qualifications Do you want to design and build the services and solutions that are ...

最新文章

  1. spark dataFrame withColumn
  2. centos mysql 新增用户
  3. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
  4. python入门(5)使用文件编辑器编写代码并保存执行
  5. 将Freeswitch SDP 固定为 external_rtp_ip
  6. Java线程更新ui_android使用多线程更新ui示例分享
  7. 使用工具Csvde导出域中所有用户信息
  8. 一文总结《Effective C++》
  9. nginx与IIS服务器搭建集群实现负载均衡(三)
  10. x264源代码简单分析:x264命令行工具(x264.exe)
  11. python :super 的作用
  12. Selenium Chrome浏览器的启动以及proxy设置
  13. 【C语言】03-第一个C程序代码分析
  14. MATLAB_图形学_形态学课程_5个车牌扣出车牌照片
  15. DiskGenius分区助手,5.1.2.766绿色单文件版更新上传
  16. 【转】当我们说“区块链是无需信任的”,我们的意思是
  17. Phpstorm通过sftp远程开发
  18. 评联想收购IBM PC
  19. Python摆脱黑窗口的方法
  20. JAVA版APP社交移动电商系统+短视频+直播+线下店+营销活动+社交支持二开

热门文章

  1. 使用 ftrace 调试 Linux 内核,第 1 部分【转】
  2. linux下的man和info命令
  3. VS2010打开就自动关闭问题解决
  4. VB中对AutoCAD对象图形文件操作
  5. 从计算机复试看中国教育——一个面试官的经历
  6. 【洛谷P1507 NASA的食物计划】动态规划
  7. [转]easyui常用控件及样式收藏
  8. 改变MyEclipse默认编码方式
  9. 用Lucene[1].net对数据库建立索引及搜索+
  10. jfreechart火速应用