日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

來源: 責(zé)編: 時(shí)間:2024-06-27 08:35:07 137觀看
導(dǎo)讀大家好,我是小風(fēng)哥,今天簡單聊聊內(nèi)存分配。我們申請一塊內(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)存分配。WyY28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(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)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時(shí)
  • K60至尊版剛預(yù)熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛?cè)缁鹑巛钡男麄髁薑60 Ultra的各種技術(shù)和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • K6:面向開發(fā)人員的現(xiàn)代負(fù)載測試工具

    K6 是一個(gè)開源負(fù)載測試工具,可以輕松編寫、運(yùn)行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設(shè)計(jì)為功能強(qiáng)大、可擴(kuò)展且易于使用。k6 可用于測試各種應(yīng)用程序,包括 Web
  • 把LangChain跑起來的三個(gè)方法

    使用LangChain開發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對高并發(fā)和性能瓶頸時(shí)感到手足無措或者焦頭爛額呢?筆者在出道那會(huì)為此是吃盡了苦頭的,不過也得
  • 為什么你不應(yīng)該使用Div作為可點(diǎn)擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯(cuò)過了許多內(nèi)置瀏覽器的功能。
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財(cái)經(jīng)作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因?yàn)樗髂嵩赑S平臺(tái)上線《原神》,怒而
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個(gè) 1。”這是2022年底,李彥宏
  • 到手價(jià)3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強(qiáng)旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會(huì),全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個(gè)版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更
Top 主站蜘蛛池模板: 文水县| 临沭县| 徐州市| 南宫市| 沐川县| 杭锦旗| 鄂托克前旗| 大洼县| 图片| 北海市| 常州市| 当涂县| 兴海县| 万源市| 衡水市| 闽清县| 定结县| 呼伦贝尔市| 资源县| 棋牌| 柯坪县| 突泉县| 宿迁市| 东至县| 鹿邑县| 宁都县| 上饶市| 惠州市| 固始县| 瓦房店市| 城步| 巴中市| 宜兴市| 顺义区| 榆林市| 靖安县| 澎湖县| 南乐县| 深州市| 桐城市| 巨野县|