AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

內(nèi)存是怎樣一步步被分配出來的?

來源: 責(zé)編: 時(shí)間:2024-06-27 08:35:07 115觀看
導(dǎo)讀大家好,我是小風(fēng)哥,今天簡單聊聊內(nèi)存分配。我們申請(qǐng)一塊內(nèi)存時(shí)計(jì)算機(jī)內(nèi)部發(fā)生了什么?看下這句代碼:圖片這里有兩部分,一個(gè)是malloc,再一個(gè)是你寫的代碼。圖片malloc實(shí)際上屬于標(biāo)準(zhǔn)庫,標(biāo)準(zhǔn)庫里有什么呢?數(shù)學(xué)相關(guān)的函數(shù),sin、cos

大家好,我是小風(fēng)哥,今天簡單聊聊內(nèi)存分配。Coi28資訊網(wǎng)——每日最新資訊28at.com

我們申請(qǐng)一塊內(nèi)存時(shí)計(jì)算機(jī)內(nèi)部發(fā)生了什么?看下這句代碼:Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

這里有兩部分,一個(gè)是malloc,再一個(gè)是你寫的代碼。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

malloc實(shí)際上屬于標(biāo)準(zhǔn)庫,標(biāo)準(zhǔn)庫里有什么呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

數(shù)學(xué)相關(guān)的函數(shù),sin、cos、絕對(duì)值、數(shù)冪函數(shù)等;字符相關(guān)函數(shù),判斷大小寫等;字符串操作函數(shù)、字符串拷貝、拼接比較等;當(dāng)然還有內(nèi)存管理函數(shù),就是這里提到的malloc/free,當(dāng)然還有很多其它函數(shù),這就是標(biāo)準(zhǔn)庫。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

再來看你寫的代碼,什么是你寫的代碼呢?以c語言為例,.c文件就是你寫的代碼,這包括你寫的hello world程序、充滿bug的練習(xí)程序,當(dāng)然還有各種項(xiàng)目。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

這就是你寫的代碼。Coi28資訊網(wǎng)——每日最新資訊28at.com

這些代碼怎么變成最終的可執(zhí)行程序呢?當(dāng)然是借助編譯器。Coi28資訊網(wǎng)——每日最新資訊28at.com

編譯器會(huì)把你的代碼編譯成目標(biāo)文件。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

接著鏈接器出場,連接器會(huì)把目標(biāo)文件和標(biāo)準(zhǔn)庫打包成可執(zhí)行程序。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

這就是代碼部分,接下來我們看內(nèi)存分配。Coi28資訊網(wǎng)——每日最新資訊28at.com

到底什么是內(nèi)存呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

內(nèi)存實(shí)際上和儲(chǔ)物柜非常相似,儲(chǔ)物柜會(huì)劃分成了一個(gè)一個(gè)大小相同的隔間,每個(gè)隔間可以存儲(chǔ)東西,內(nèi)存的道理也一樣,內(nèi)存也被劃分成了一個(gè)一個(gè)大小相同的隔間,我們來仔細(xì)看一下。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

內(nèi)存中的每個(gè)隔間存儲(chǔ)的是一個(gè)字節(jié),8比特位一字節(jié)。Coi28資訊網(wǎng)——每日最新資訊28at.com

比如這里申請(qǐng)的一塊int大小的內(nèi)存,一個(gè)int占據(jù)4個(gè)字節(jié)。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

和儲(chǔ)物柜一樣,內(nèi)存中的每個(gè)隔間也有一個(gè)編號(hào),這個(gè)編號(hào)叫做內(nèi)存地址。Coi28資訊網(wǎng)——每日最新資訊28at.com

在我們的實(shí)例中,申請(qǐng)的這塊內(nèi)存位于內(nèi)存地址2這個(gè)位置,這意味著什么嗯?這意味著變量p等于數(shù)字2,或者說等于內(nèi)存地址2,這里的p就是所謂的指針。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

接著我們看內(nèi)存分配過程。Coi28資訊網(wǎng)——每日最新資訊28at.com

這段代碼當(dāng)然屬于編譯后生成的可執(zhí)行程序,可執(zhí)行程序是在內(nèi)存中運(yùn)行的,當(dāng)然我們需要為整個(gè)程序分配一塊內(nèi)存。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

程序的運(yùn)行依賴棧區(qū),這里存放著局部變量等信息;依賴堆區(qū),這里存放著程序員自己管理的動(dòng)態(tài)申請(qǐng)的內(nèi)存,關(guān)于堆區(qū)和棧區(qū)之前的視頻也有講解;除此之外還依賴代碼區(qū),這里保存的就是編譯后的之類;還有數(shù)據(jù)區(qū),這里保存著全局變量等信息。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

這些區(qū)域在內(nèi)存中的布局是這樣的:Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

再次強(qiáng)調(diào)下,編譯后的代碼位于代碼區(qū),malloc動(dòng)態(tài)申請(qǐng)的內(nèi)存位于堆區(qū),接下來我們只關(guān)注堆區(qū)。Coi28資訊網(wǎng)——每日最新資訊28at.com

在程序開始運(yùn)行時(shí)堆區(qū)當(dāng)然是空的,那么所謂的內(nèi)存分配到底是什么呢?如果讓你實(shí)現(xiàn)內(nèi)存分配器該怎么做到呢?很簡單,其實(shí)內(nèi)存分配就是劃分地盤。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)要分配第一塊大小為A的內(nèi)存,那么你應(yīng)該把A放在哪里呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

因?yàn)榇藭r(shí)堆區(qū)是空的,顯然你可以把開始這個(gè)位置劃分給A,作為A的地盤,找到A的地盤后malloc這個(gè)函數(shù)返回,內(nèi)存分配過程結(jié)束,是不是很簡單。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

接著程序員又開始申請(qǐng)大小為B的內(nèi)存,道理和A一樣,把A之后的地盤給B即可。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

程序員又開始申請(qǐng)大小為C的內(nèi)存,同理。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

接著程序員說A占用的這塊內(nèi)存使用完畢,調(diào)用free釋放,所謂釋放就是把A占據(jù)的地盤重新標(biāo)記為空閑,這時(shí)堆區(qū)里還有兩塊空閑內(nèi)存。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

接著程序員開始申請(qǐng)大小為D,這時(shí)問題來了,你該從哪里給D劃分地盤呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

放到第一個(gè)空閑塊嗎?顯然第一個(gè)空閑塊大小不夠。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

第二個(gè)呢,第二個(gè)也不夠。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

但是你發(fā)現(xiàn)了一個(gè)問題,仔細(xì)看著兩個(gè)空閑塊,這兩個(gè)空閑塊的總大小實(shí)際上是超過D的。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

我們把這種空閑的但是不能用來分配出去的內(nèi)存稱之為內(nèi)存碎片。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

你可以想象一下經(jīng)過不斷的內(nèi)存申請(qǐng)和釋放,堆區(qū)中會(huì)存在無數(shù)這樣空閑內(nèi)存碎片。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

碎片化的內(nèi)存顯然不利于內(nèi)存的充分利用,計(jì)算機(jī)科學(xué)歷史上有無數(shù)論文試圖來解決這個(gè)問題。Coi28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在堆區(qū)已經(jīng)不足以為D申請(qǐng)出內(nèi)存,該怎么辦呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

讓我們回到最初的布局,注意看堆區(qū)和棧區(qū)中間實(shí)際上還有一段空閑內(nèi)存區(qū)域,這塊區(qū)域就是為堆區(qū)或棧區(qū)來擴(kuò)大地盤用的,那么該怎么擴(kuò)大堆區(qū)呢?Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

這就要借助操作系統(tǒng)的幫助了。Coi28資訊網(wǎng)——每日最新資訊28at.com

在linux等系統(tǒng)中可以借助brk等系統(tǒng)調(diào)用向操作系統(tǒng)申請(qǐng)來擴(kuò)大堆區(qū)。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Coi28資訊網(wǎng)——每日最新資訊28at.com

Coi28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在堆區(qū)擴(kuò)容完畢,此時(shí)就可以在堆區(qū)中找出一塊合適的空閑內(nèi)存分配給D,到這時(shí)malloc這個(gè)過程才真正結(jié)束,這實(shí)際上是一個(gè)相當(dāng)復(fù)雜的過程。Coi28資訊網(wǎng)——每日最新資訊28at.com

圖片 圖片 Coi28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-96829-0.html內(nèi)存是怎樣一步步被分配出來的?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 高通中國區(qū)董事長孟樸:攜手生態(tài)伙伴,共創(chuàng)數(shù)智時(shí)代下的新增長機(jī)遇

下一篇: 最高優(yōu)惠 300 元,小米 Civi 4 Pro 手機(jī)開啟“暑期特惠”:驍龍 8s Gen3,2799 元起

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 影音體驗(yàn)是真的強(qiáng) 簡單聊聊iQOO Pad

    大公司的好處就是產(chǎn)品線豐富,非常細(xì)分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發(fā)布會(huì)上看到了iQOO的首款平板產(chǎn)品iQOO Pad。雖
  • Automa-通過連接塊來自動(dòng)化你的瀏覽器

    1、前言通過瀏覽器插件可實(shí)現(xiàn)自動(dòng)化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對(duì)于簡單的業(yè)務(wù)來說可快速實(shí)現(xiàn)自動(dòng)化的上手工作。Selenium IDEKat
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們?cè)谌粘9ぷ骱蜆I(yè)務(wù)中需要進(jìn)行各種審批流程時(shí),可能會(huì)面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動(dòng)處理這些審批流程可能會(huì)導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 小紅書1周漲粉49W+,我總結(jié)了小白可以用的N條漲粉筆記

    作者:黃河懂運(yùn)營一條性教育視頻,被54萬人“珍藏”是什么體驗(yàn)?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點(diǎn)贊!更瘋狂的是,這
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元“人在職場,應(yīng)該選擇什么樣的著裝?”近日,在網(wǎng)絡(luò)上,一個(gè)與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級(jí)寫字樓亞洲金
  • 華為HarmonyOS 4升級(jí)計(jì)劃公布:首批34款機(jī)型今日開啟公測

    8月4日消息,今天下午華為正式發(fā)布了HarmonyOS 4系統(tǒng),在更流暢的前提下,還帶來了不少新功能,UI設(shè)計(jì)也有變化,會(huì)讓手機(jī)煥然一新。華為宣布,首批機(jī)型將會(huì)在
  • iQOO Neo8 Pro評(píng)測:旗艦雙芯加持 最強(qiáng)性能游戲旗艦

    【Techweb評(píng)測】去年10月,iQOO推出了一款Neo7手機(jī),該機(jī)搭載了聯(lián)發(fā)科天璣9000+,配備獨(dú)顯芯片Pro+,帶來了同價(jià)位段最佳的游戲體驗(yàn),一經(jīng)上市便受到了諸多用
  • iQOO Neo8 Pro真機(jī)諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機(jī)型,不僅搭載了天璣9000+,而且是同價(jià)位唯一一款天璣9000+直屏旗艦,一經(jīng)上市便受到了用戶的廣泛關(guān)注。在時(shí)隔半年后,
  • 滴滴違法違規(guī)被罰80.26億 共存在16項(xiàng)違法事實(shí)

    滴滴違法違規(guī)被罰80.26億 存在16項(xiàng)違法事實(shí)開始于2121年7月,歷經(jīng)一年時(shí)間,網(wǎng)絡(luò)安全審查辦公室對(duì)“滴滴出行”網(wǎng)絡(luò)安全審查終于有了一個(gè)暫時(shí)的結(jié)束。據(jù)“網(wǎng)信
Top