searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

rust string/vec内存结构浅析

2023-09-26 09:12:08
8
0

String/str/&str

let noodles = "noodles".to_string();

let oodles = &noodles[1..];

let poodles = "ಠ_ಠ";

 

strs 是内存中某处动态长度的 UTF-8 字节的不可变序列。由于大小未知,因此只能在指针后面处理它,这意味着str通常显示为&str,即对某些UTF-8数据的引用,通常称为“字符串切片”或简称为“切片”。

 

Vec

 

vec的数据储存在堆中,栈里面只储存数据的“胖指针”。

let v1 = vec![1,2,3];

 

 

Vec and &Vec

 

let v: Vec<f64> = vec![0.0, 0.707, 1.0, 0.707];

let a: [f64; 4] = [0.0, -0.707, -1.0, -0.707];

let sv: &[f64] = &v;

let sa: &[f64] = &a;

 

(下图引用)

 

 

Vec<i32> and Vec<Box<i32>>

 

let vec1 = vec![1, 2, 3, 4];

let vec2 = vec![Box::new(1), Box::new(2), Box::new(3),

Box::new(4)];

 

vec1:

 

 

vec2:

 

0条评论
0 / 1000
陈****炤
7文章数
1粉丝数
陈****炤
7 文章 | 1 粉丝
原创

rust string/vec内存结构浅析

2023-09-26 09:12:08
8
0

String/str/&str

let noodles = "noodles".to_string();

let oodles = &noodles[1..];

let poodles = "ಠ_ಠ";

 

strs 是内存中某处动态长度的 UTF-8 字节的不可变序列。由于大小未知,因此只能在指针后面处理它,这意味着str通常显示为&str,即对某些UTF-8数据的引用,通常称为“字符串切片”或简称为“切片”。

 

Vec

 

vec的数据储存在堆中,栈里面只储存数据的“胖指针”。

let v1 = vec![1,2,3];

 

 

Vec and &Vec

 

let v: Vec<f64> = vec![0.0, 0.707, 1.0, 0.707];

let a: [f64; 4] = [0.0, -0.707, -1.0, -0.707];

let sv: &[f64] = &v;

let sa: &[f64] = &a;

 

(下图引用)

 

 

Vec<i32> and Vec<Box<i32>>

 

let vec1 = vec![1, 2, 3, 4];

let vec2 = vec![Box::new(1), Box::new(2), Box::new(3),

Box::new(4)];

 

vec1:

 

 

vec2:

 

文章来自个人专栏
clink
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0