那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

誰才是管理內(nèi)存的大BOSS

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-17 14:26 ? 次閱讀

對(duì)于C/C++程序員來說,內(nèi)存分配再正常不過,C語言中的malloc:

int* a = (int*)malloc(sizeof(int));

C++中的new:

int* a = new int(10);

接下來的問題是變量a占用的內(nèi)存是誰給我們分配的呢?

答案是運(yùn)行在用戶態(tài)的內(nèi)存分配器,如果你愿意,也可以繞過內(nèi)存分配器自己來管理內(nèi)存。

接下來的問題是a占用的內(nèi)存在哪里呢?

答案是進(jìn)程地址空間中的堆區(qū),堆區(qū)在這里:

圖片

內(nèi)存中真的有像圖中這樣的布局嗎?

答案是: 沒有

這就是所謂的虛擬內(nèi)存。

既然是虛擬內(nèi)存那么這里的堆區(qū)又是從哪里來的呢?

答案是操作系統(tǒng)

當(dāng)我們?cè)贑/C++中分配內(nèi)存時(shí),內(nèi)存分配器從堆區(qū)中找到可用內(nèi)存,但如果沒有找到則向操作系統(tǒng)申請(qǐng)。

那么操作系統(tǒng)又是從哪里找到的內(nèi)存呢?

答案是:操作系統(tǒng)從物理內(nèi)存中找到一塊可用內(nèi)存分配出去。

問題來了,既然操作系統(tǒng)管理的是物理內(nèi)存,而操作系統(tǒng)分配給進(jìn)程的又是虛擬內(nèi)存,精神分裂啊有沒有,這是怎么一回事呢?

原來這并不沖突,操作系統(tǒng)會(huì)為每個(gè)進(jìn)程分配一張表,記錄了從虛擬內(nèi)存到物理內(nèi)存的映射,這張表就叫頁表。

圖片

因此,盡管操作系統(tǒng)管理的是物理內(nèi)存,但進(jìn)程或者說程序員是看不到物理內(nèi)存的,我們只能看到虛擬內(nèi)存,程序運(yùn)行時(shí)在發(fā)送內(nèi)存讀寫指令時(shí)MMU會(huì)將虛擬內(nèi)存轉(zhuǎn)換為物理內(nèi)存。

接下來的問題是頁表在哪里?

答案是: 在內(nèi)存中

你可以將頁表放在內(nèi)存中的任何位置上,只要能告訴CPU在哪里即可。

誰來負(fù)責(zé)構(gòu)造頁表呢?答案是操作系統(tǒng),操作系統(tǒng)負(fù)責(zé)創(chuàng)建頁表,頁表本質(zhì)上就是一個(gè)數(shù)組,處理器規(guī)定頁表的格式,操作系統(tǒng)按照這種格式構(gòu)建好頁表,創(chuàng)建好后即可告訴CPU。

該怎樣告訴CPU呢?

答案是:通過寫特定的寄存器

CPU中有特定的寄存器,以x86處理器為例,其中的控制寄存器cr3就用來保存頁表的地址,假設(shè)指針pagetable指向頁表,那么可以這樣設(shè)置:

mov   $(pagetable), %eaxmov   %eax, %cr3

pagetable必須是物理地址,頁表本身就用來將虛擬地址轉(zhuǎn)為物理地址,因此向cr3中寫入虛擬地址是沒有道理的。

接下來的問題是什么時(shí)候?qū)㈨摫韺懭隿r3寄存器呢?

答案是:很多時(shí)候,操作系統(tǒng)初始化階段、進(jìn)程切換時(shí)等。

現(xiàn)在你應(yīng)該知道了吧,其實(shí)內(nèi)存管理(段式管理、頁式管理)是處理器提供的一種機(jī)制,操作系統(tǒng)只是這種機(jī)制的使用者,我們常說的虛擬內(nèi)存是處理器本身的一種能力, 如果處理器本身不提供這種能力,那么操作系統(tǒng)自己是很難高效實(shí)現(xiàn)虛擬內(nèi)存的

CPU才是管理內(nèi)存真正的大boss。

實(shí)際上如果你去看類似x86這樣的處理器編程手冊(cè)時(shí)就會(huì)發(fā)現(xiàn),我們?cè)诓僮飨到y(tǒng)課中熟悉的很多概念其實(shí)是處理器這種硬件提供的,操作系統(tǒng)僅僅是利用這些硬件的一層軟件。

因此,從這個(gè)角度看,操作系統(tǒng)僅僅是CPU的一個(gè)“驅(qū)動(dòng)程序”而已。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10905

    瀏覽量

    213030
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3055

    瀏覽量

    74335
  • 分配器
    +關(guān)注

    關(guān)注

    0

    文章

    195

    瀏覽量

    25832
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux的內(nèi)存管理是什么,Linux的內(nèi)存管理詳解

    Linux的內(nèi)存管理 Linux的內(nèi)存管理是一個(gè)非常復(fù)雜的過程,主要分成兩個(gè)大的部分:內(nèi)核的內(nèi)存管理
    的頭像 發(fā)表于 05-11 17:54 ?6158次閱讀
    Linux的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>是什么,Linux的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>詳解

    電子發(fā)燒友到底誰是大俠?才是真正的高手?

    本帖最后由 會(huì)飛的鴨子 于 2014-4-2 16:59 編輯 選出才是真正的高手,才是大牛!吳鑒鷹單片機(jī)項(xiàng)目詳細(xì)解析系列(連載)之基于單片機(jī)的實(shí)戰(zhàn)項(xiàng)目社區(qū)之星-單片機(jī)達(dá)人-
    發(fā)表于 04-01 13:29

    工業(yè)以太網(wǎng)與現(xiàn)場總線才是主流?

    現(xiàn)場總線、以太網(wǎng)、無線技術(shù)各有優(yōu)劣,那么才會(huì)是未來的主流呢?顯然對(duì)所有生產(chǎn)商或機(jī)器并非只有一種技術(shù)才是“正確的”方案?生產(chǎn)商必須權(quán)衡各類方案帶來的價(jià)值。有沒有比采用普通方案帶來的利益更有
    發(fā)表于 09-29 09:49

    華為、蘋果、三星、高通才是SOC的無冕之王?

    四大旗艦處理器相繼曝光,華為、蘋果、三星、高通才是SOC的無冕之王?
    發(fā)表于 06-03 14:41

    內(nèi)存管理概述及原理

    記錄一下,方便以后翻閱~主要內(nèi)容:1) 內(nèi)存管理概述及原理;2)相關(guān)實(shí)驗(yàn)代碼解讀。官方資料:《STM32中文參考手冊(cè)_V10》-第19章 靈活的靜態(tài)存儲(chǔ)器控制器(FSMC)。實(shí)驗(yàn)要求:系統(tǒng)啟動(dòng)后
    發(fā)表于 02-23 06:15

    如何分辨才是真正的工程師?

    有時(shí)候你會(huì)想弄清楚某位工程師的基本技術(shù)能力與背景,到底才是擁有“真才實(shí)料”的真正工程師,誰又只會(huì)在那里自我吹噓。
    發(fā)表于 02-07 10:27 ?1524次閱讀

    揭秘手機(jī)為什么卡?才是決定手機(jī)卡頓的關(guān)鍵

    處理器、內(nèi)存、GPU才是決定手機(jī)卡頓的關(guān)鍵安卓手機(jī)使用一段時(shí)間后會(huì)出現(xiàn)卡頓,相信不少用戶都遇到過。
    發(fā)表于 04-01 10:43 ?1.4w次閱讀

    iPhone7、iPhone8、iPhone7plus才是最值得買

    蘋果手機(jī)價(jià)格相差很大,特別是新款,更是被炒得火熱,iPhone7、iPhone8、iPhone7plus才是最值得買?那款才是最值得買的iPhone?蘋果手機(jī)憑借著出色的系統(tǒng)體驗(yàn),以及強(qiáng)大的品牌
    發(fā)表于 03-13 14:45 ?8.6w次閱讀

    充電樁還是換電站才是市場的未來

    最近一段時(shí)間,隨著特斯拉的輪番降價(jià),新能源汽車的普及顯得越來越容易,面對(duì)著新能源汽車的發(fā)展,一個(gè)重要的問題擺在大家的問題,從充電樁到換電站,才是新能源汽車的真正未來?
    的頭像 發(fā)表于 11-16 16:33 ?4403次閱讀

    到底才是頂級(jí)旗艦?

    到底才是頂級(jí)旗艦?自從驍龍888手機(jī)上市之后,這個(gè)問題就很難有答案。因?yàn)椴簧偃藦?qiáng)調(diào),驍龍888真的翻車了,驍龍865依然能打。那真是這樣嗎?其實(shí)看看跑分就有答案,安兔兔公布了今年1月的旗艦手機(jī)跑分,從跑分情況來看,驍龍888穩(wěn)坐第一還是沒懸念的,只不過最大的問題,也許是
    的頭像 發(fā)表于 02-04 17:08 ?1718次閱讀

    什么是內(nèi)存管理?如何進(jìn)行內(nèi)存管理?及內(nèi)存管理的方案與分析

    前面已經(jīng)將所有的硬件驅(qū)動(dòng)實(shí)現(xiàn),驗(yàn)證了硬件功能。但是每一個(gè)硬件都是單獨(dú)測試的,而且并不完善。下一步,我們需要對(duì)各個(gè)驅(qū)動(dòng)進(jìn)行整合完善。在整合之前,需要做一些基礎(chǔ)工作。其中之一就是實(shí)現(xiàn)內(nèi)存管理。什么叫內(nèi)存
    的頭像 發(fā)表于 03-26 13:38 ?7231次閱讀
    什么是<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>?如何進(jìn)行<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>?及<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的方案與分析

    STM32內(nèi)存管理

    內(nèi)存管理詳解1、介紹內(nèi)存管理,是指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當(dāng)?shù)臅r(shí)候釋放和
    發(fā)表于 12-24 19:37 ?14次下載
    STM32<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>

    智慧家庭系列文章 | 控制權(quán)大作戰(zhàn):才是智能家居系統(tǒng)的控制中心?

    智慧家庭系列文章 | 控制權(quán)大作戰(zhàn):才是智能家居系統(tǒng)的控制中心?
    發(fā)表于 10-31 08:23 ?0次下載
    智慧家庭系列文章 | 控制權(quán)大作戰(zhàn):<b class='flag-5'>誰</b><b class='flag-5'>才是</b>智能家居系統(tǒng)的控制中心?

    才是最有發(fā)展前途的封裝材料呢?

    目前,常用電子封裝陶瓷基片材料包括氧化鋁(Al2O3)、氮化鋁(AlN)、氮化硅(Si3N4)、氧化鈹(BeO)、碳化硅(SiC)等。那么,才是最有發(fā)展前途的封裝材料呢?
    的頭像 發(fā)表于 04-13 10:44 ?1322次閱讀

    Linux 內(nèi)存管理總結(jié)

    一、Linux內(nèi)存管理概述 Linux內(nèi)存管理是指對(duì)系統(tǒng)內(nèi)存的分配、釋放、映射、管理、交換、壓縮
    的頭像 發(fā)表于 11-10 14:58 ?593次閱讀
    Linux <b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>總結(jié)
    赌博百家乐官网有技巧吗| 百家乐十佳投庄闲法| 大发888在线娱乐游戏| 百家乐官网烫金筹码| 赌场百家乐信誉| 姚记娱乐城官网| 百家乐官网平台| 六合彩130| 属蛇和属猪做生意| bet365备用主页| 伟易博百家乐官网的玩法技巧和规则| 真人游戏下载| 百家乐官网侧牌器| 大发888网站是多少呢| 老k百家乐官网的玩法技巧和规则 KTV百家乐官网的玩法技巧和规则 | 百家乐庄闲必胜打| 金城百家乐官网平台| 大中华百家乐的玩法技巧和规则| 百家乐官网翻天粤qvod| 百家乐单机游戏免费下| 百家乐官网连线游戏下载| 澳门百家乐网上赌城| 澳门百家乐官网会出老千吗| 威尼斯人娱乐城 老品牌| 百家乐官网在线娱乐网| 现金网开户送彩金| 百家乐有哪几种| 霸州市| 百家乐庄闲偏差有多大| 百家乐官网真钱游戏下载| 百家乐技巧平注常赢法| 乐天堂百家乐官网娱乐| 516棋牌游戏中心 官方版| 百家乐破解辅助| 百家乐官网美女荷官| 百家乐路书| 线上百家乐官网平玩法| 足球赛事直播| 澳门百家乐赢钱秘| 百家乐官网做庄家必赢诀窍| 娱网棋牌大厅下载|