網(wǎng)站跟app的區(qū)別是什么網(wǎng)站排名大全
喜歡的話別忘了點(diǎn)贊、收藏加關(guān)注哦(加關(guān)注即可閱讀全文),對接下來的教程有興趣的可以關(guān)注專欄。謝謝喵!(=・ω・=)
1.6.1. 靜態(tài)(static)內(nèi)存
static內(nèi)存實(shí)際上是一個統(tǒng)稱,它指的是程序編譯后的文件中幾個密切相關(guān)的區(qū)域。當(dāng)程序執(zhí)行的時候,這些區(qū)域會自動加載到內(nèi)存里。
static內(nèi)存里的值會在程序執(zhí)行期間一直存活。
程序的static內(nèi)存是包含程序的二進(jìn)制代碼的(通常映射為只讀的)。隨著程序的執(zhí)行,它會在文本段的二進(jìn)制代碼中挨個指令進(jìn)行遍歷,而當(dāng)函數(shù)被調(diào)用時就進(jìn)行跳躍。
static內(nèi)存會持有使用static聲明的變量的內(nèi)存,也包括某些常量值,例如字符串。
1.6.2. ‘static
生命周期標(biāo)注
‘static
是一個特殊的生命周期,它的名字來源于static內(nèi)存區(qū)。它將引用標(biāo)記為只要static內(nèi)存還存在(也就是程序關(guān)閉之前),那么引用就合法。
static變量的內(nèi)存在程序開始運(yùn)行時就分配了。指向static內(nèi)存中變量的引用,按定義來說,就是'static
的,因?yàn)樵诔绦蜿P(guān)閉之前它不會被釋放;但是有'static
生命周期標(biāo)注的引用可以不指向static內(nèi)存。
既然'static
生命周期標(biāo)注的引用可以不指向static內(nèi)存,為什么還要把這種生命周期命名為'static
呢?有'static
標(biāo)注但不存儲在static內(nèi)存里這不是誤導(dǎo)人嗎?
'static
這個名稱仍然適用的原因在于:一旦你創(chuàng)建了一個'static
的生命周期的引用,就程序的其余部分而言,它所指向的內(nèi)存都可能在static內(nèi)存中,因?yàn)槌绦蛳胍褂盟嗑枚紱]問題
話句話說:'static
這個名字可能會讓人誤以為所有帶有'static
生命周期的引用都指向靜態(tài)內(nèi)存區(qū)(即程序運(yùn)行期間一直存在的全局變量或常量)。但實(shí)際上,'static
只是表示這個引用在整個程序生命周期內(nèi)都是有效的,至于它指向的內(nèi)存是否真的存儲在靜態(tài)區(qū),并不一定。換句話說,'static
生命周期的引用意味著 “這個引用可以一直存在,程序可以隨時使用它”,但并不強(qiáng)制要求它的內(nèi)容必須是靜態(tài)分配的。
在寫Rust代碼的時候,遇到更多的會是'staic
生命周期標(biāo)注而不是static內(nèi)存。'static
經(jīng)常出現(xiàn)在類型參數(shù)的trait bounds上。
例如T: 'static
就代表類型T
可以存活我們想要的任何時長(知道程序關(guān)閉),同時這也要求T
是擁有所有權(quán)的并且是自給自足的。這代表著這個類型要么它不借用其它(非static)值,要么它借用的東西是static的。這樣就能保證類型能活到程序結(jié)束。
1.6.3. const
與static
的區(qū)別
const
關(guān)鍵字會把緊隨它的東西聲明為常量,例如:
const X: i32 = 123;
X
被聲明為了常量
常量可在編譯的時候完全計算出來。在計算期間,任何引用常量的代碼會被替換為常量的計算結(jié)果值。
例如:
const X: i32 = 123;
println!("{}", X);
這句話中的打印操作就會在編譯時被改為:
println!("{}", 123);
所以常量沒有內(nèi)存或關(guān)聯(lián)其它存儲(因?yàn)樗皇且粋€地方)。你可以把常量理解為某個特殊值的方便的名稱。