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