016 Rust死灵书之安全方式内存初始化
生活随笔
收集整理的這篇文章主要介紹了
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死灵书之安全方式内存初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 11.0 修改添加的默认
- 下一篇: 3D房地产营销PPT模板