成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Rust 切片與 Go 有何區(qū)別?

開(kāi)發(fā)
Rust 之所以將 Go 中的單一切片類型分成 Vec 和切片兩種,是為了提供更明確的內(nèi)存管理語(yǔ)義,減少引用計(jì)數(shù)導(dǎo)致的性能開(kāi)銷。

大家好,我是漁夫。

今天,讓我們一起深入學(xué)習(xí) Rust 中的切片。在 Rust 編程語(yǔ)言中,除了常見(jiàn)的 String 類型,還有一種重要的字符串類型:str。這種類型通常被稱為字符串切片(slice)。

字符串切片可以理解為對(duì)一個(gè)字符串的部分或全部的引用。這意味著切片可以有任意長(zhǎng)度,它的靈活性在某種程度上與 Golang 語(yǔ)言中的切片相似。

當(dāng)我們談?wù)撉衅囊脮r(shí),實(shí)際上我們是在引用一種特殊的指針,通常稱為“胖指針”。這個(gè)指針不僅包含了對(duì)數(shù)據(jù)的引用,還包含了切片的長(zhǎng)度信息。

讓我們通過(guò)下面的代碼示例來(lái)具體分析這一概念,下面從 String 變量 s 創(chuàng)建了兩個(gè)切片 s1 和 s2:

fn main() {
    let s = String::from("hello");

    let s1: &str = &s[0..3];
    let s2: &str = &s[3..s.len()];

    // 打印出值
    println!("s = {}", s);
    println!("s1 = {}", s1);
    println!("s2 = {}", s2);

    // 長(zhǎng)度和容量
    println!("len = {}", s.len());
    println!("capacity = {}", s.capacity());

    // 地址
    println!("Address of s: {:p}", &s);
    println!("Address of s1: {:p}", s1.as_ptr());
    println!("Address of s2: {:p}", s2.as_ptr());
}

運(yùn)行結(jié)果:

s = hello
s1 = hel
s2 = lo
len = 5
capacity = 5
Address of s: 0x7ffee307b650
Address of s1: 0x7f8d3ad02ab0
Address of s2: 0x7f8d3ad02ab3

從例子中,可以觀察到 s1 和 s2  其實(shí)都是s 字符串的切片,是 s 的部分引用,意思就是相當(dāng)于借用了 s 的部分內(nèi)存空間。觀察這些變量的長(zhǎng)度、容量和內(nèi)存地址揭示了它們之間的關(guān)系:盡管 s1 和 s2 有不同的內(nèi)存地址,但它們是從同一原始字符串 s 中派生出來(lái)的。(畫好的圖,忘記插入了,哈哈)

再打印出 s1 和 s2 的長(zhǎng)度:

println!("len = {}", s1.len()); // 3
println!("len = {}", s2.len()); // 2

可以看到切片取值情況:

  • &s1:截取從索引 0 到 索引 3
  • &s2:從索引 3 開(kāi)始到索引 5 結(jié)束

Go 切片 和 Rust 切片有什么不同

Go 和 Rust 使用“切片”這個(gè)詞描述不同的概念。在 Go 中,切片結(jié)構(gòu)體既包含長(zhǎng)度信息也包含容量信息,它既可以擴(kuò)展也可以作為現(xiàn)有切片的引用,而無(wú)需擔(dān)心所有權(quán)和生命周期。Rust 則將這些功能分離:Vec<T> 是一個(gè)可增長(zhǎng)的容器,擁有其數(shù)據(jù)的所有權(quán);而 &[T] 是一個(gè)固定大小的切片,只是一個(gè)指向數(shù)據(jù)的借用。

這種區(qū)別反映了 Rust 的所有權(quán)原則,這在無(wú)GC語(yǔ)言語(yǔ)境下提供了內(nèi)存安全保障。在 Rust 中,所有權(quán)、借用和生命周期的概念是核心特性,因此 Vec 和切片必須是兩種不同的類型。相反,Go 的類型系統(tǒng)不強(qiáng)制執(zhí)行這些概念,因?yàn)樗蕾囉诶占鱽?lái)管理內(nèi)存。雖然這在概念上似乎更簡(jiǎn)單,但它也隱藏了潛在的內(nèi)存管理復(fù)雜性。

Rust 之所以將 Go 中的單一切片類型分成 Vec 和切片兩種,是為了提供更明確的內(nèi)存管理語(yǔ)義,減少引用計(jì)數(shù)導(dǎo)致的性能開(kāi)銷。這些設(shè)計(jì)決策與 Rust 的目標(biāo)一致,即提供零成本抽象和更細(xì)粒度的內(nèi)存控制。

責(zé)任編輯:趙寧寧 來(lái)源: 碼農(nóng)漁夫
相關(guān)推薦

2021-06-25 10:04:47

DevOpsDevSecOps開(kāi)發(fā)

2022-07-12 10:58:49

Linuxsusudo

2020-09-14 09:01:43

VMware vSANSAN網(wǎng)絡(luò)虛擬化

2019-12-10 11:49:30

網(wǎng)絡(luò)協(xié)議LACPPAGP

2023-08-14 10:02:46

命令Linux

2023-06-03 00:04:10

容器虛擬機(jī)VM

2023-03-29 08:03:53

2013-10-11 09:22:49

EBGPIBGPIGP

2021-10-21 22:00:55

比特幣加密貨幣貨幣

2020-03-17 11:05:35

智能家居智能建筑物聯(lián)網(wǎng)

2020-05-24 16:32:27

消費(fèi)物聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)物聯(lián)網(wǎng)

2020-07-07 07:00:00

RustGo語(yǔ)言編程語(yǔ)言

2023-01-04 11:41:31

微服務(wù)SOA架構(gòu)

2018-02-09 07:47:47

大數(shù)據(jù)BI商業(yè)智能

2020-05-09 08:31:41

M2MIoT物聯(lián)網(wǎng)

2024-02-21 23:13:45

C++編程開(kāi)發(fā)

2024-03-01 20:16:03

GoRust語(yǔ)言

2011-07-20 09:36:58

XenClient 2XenClient X

2023-07-06 14:24:23

Spring接口自定義

2020-05-21 10:34:49

微隔離網(wǎng)絡(luò)攻擊安全架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 波多野结衣电影一区 | 亚洲91视频 | 妹子干综合 | 久久久精彩视频 | 国产精品久久久久久久久久久久 | 欧美精品一区在线观看 | 成人免费大片黄在线播放 | 欧美一级二级视频 | 美女久久久久久久 | 国产成人精品区一区二区不卡 | 欧美激情亚洲激情 | 性国产丰满麻豆videosex | 中文字幕免费在线 | 99热在线播放 | 日本一区二区三区在线观看 | 欧美激情网站 | 日本高清中文字幕 | 久久久久国产精品免费免费搜索 | 毛片日韩 | 国产91丝袜 | 国产精品久久久久久久久久久久冷 | 亚洲一区二区三区在线免费观看 | 国产成人久久精品一区二区三区 | a网站在线观看 | 日本午夜免费福利视频 | 日韩中文字幕一区 | 久久综合一区 | 亚洲一区二区三区在线免费 | 国产乱码一二三区精品 | 国产一区免费 | 99re在线视频精品 | 成人黄色电影在线播放 | 欧美福利在线 | 视频一区在线 | 中文精品视频 | 亚洲福利在线观看 | 99热精品在线观看 | 日本久久精品 | 免费九九视频 | 99久9| 日韩精品一区二区三区在线观看 |