日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

016 Rust死灵书之安全方式内存初始化

發布時間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 016 Rust死灵书之安全方式内存初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列錄制的視頻主要放在B站上Rust死靈書學習視頻

Rust 死靈書相關的源碼資料在https://github.com/anonymousGiga/Rustonomicon-Source

介紹

所有運行期分配的內存開始時都是 "未初始化"的。Rust 提供了處理未初始化內存的方式,既有安全的方式也有非安全的方式。

安全方式

所有棧上的變量在顯式賦值之前都是未初始化的,但是Rust禁止程序員在賦值之前讀取這些變量。

//例子1 fn main() {let i: i32;//println!("i = {}", i); //errorif true {i = 1;println!("i = {}", i); }//println!("i = {}", i); //error } //例子2 fn main() {let x: i32;loop {// Rust不知道這個分支會被無條件執行//因為它依賴于實際值if true {// 但是它確實知道循環只會有一次,因為我們會無條件break// 所以x不需要是可變的x = 0;break;}}// 它也知道如果沒有執行break的話,代碼不會運行到這里// 所以在這里x一定已經被初始化了println!("{}", x);}

如果值從變量中移出且變量類型不是 Copy,那么變量邏輯上處于未初始化狀態。

fn main() {//如果值從變量中移出且變量類型不是 Copy,那么變量邏輯上處于未初始化狀態let x = 0;let y = Box::new(0);let z1 = x; // x仍然是合法的,因為i32是Copylet z2 = y; // y現在邏輯上未初始化,因為Box不是Copyprintln!("x = {}", x);//println!("y = {}", y);println!("z1 = {}", z1);println!("z2 = {}", z2);//y = Box::new(1); // 重新初始化y, error,需要將y修改成mutprintln!("Hello, world!"); }

總結

以上是生活随笔為你收集整理的016 Rust死灵书之安全方式内存初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。