青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

以前寫(xiě)過(guò)一篇理解程序內(nèi)存, 當(dāng)時(shí)主要是針對(duì)用戶(hù)態(tài),下面再稍微深入一點(diǎn):


我們以32位程序?yàn)槔ú粏⒂肁WE), 總共4G虛擬空間,其中低2G屬于用戶(hù)態(tài), 高2G屬于操作系統(tǒng)內(nèi)核, 每個(gè)程序都有自己的低2G用戶(hù)空間, 高2G內(nèi)核空間是所有程序共享的。高2G內(nèi)核空間中, 屬于同一Session的程序又共享相同的session空間:


x86系統(tǒng)所有的內(nèi)存以64K邊界粒度, 4K頁(yè)面大小分配。


用戶(hù)態(tài)的內(nèi)存空間,按用途分可以分為: image, mapped file, heap, stack, free等
按狀態(tài)分可以分為:Free, reserved, commit;
Commit的內(nèi)存,在被訪(fǎng)問(wèn)時(shí)又可能以不同的狀態(tài)存在, 可能是已經(jīng)提交到物理內(nèi)存(RAM),也可能是已頁(yè)文件的形式存在后臺(tái), 如果是頁(yè)文件形式,訪(fǎng)問(wèn)時(shí)會(huì)觸發(fā)換頁(yè)操作。


我們平時(shí)以任務(wù)管理器或者Process Explorer, 經(jīng)常會(huì)看到一些不同內(nèi)存術(shù)語(yǔ):
virtual size: reserve和commit的虛擬內(nèi)存
Private bytes: 已經(jīng)commit的私有虛擬內(nèi)存
working set: commit的虛擬內(nèi)存中已經(jīng)被加載到物理內(nèi)存中的部分
WS private / 內(nèi)存(專(zhuān)用工作集): 不能和其他程序共享的working set


這些內(nèi)存的大小關(guān)系怎么樣?
virtual size 肯定是最大的; WS private肯定是最小的;working set和private bytes大小不好定, 因?yàn)閣orking set雖然是表示物理內(nèi)存, 但它包含共享和非共享兩部分, 而private bytes雖然是虛擬內(nèi)存,卻只包含私有部分。
另外我們平時(shí)看程序的內(nèi)存泄漏,主要可以看private bytes 和 WS private.


我們程序里使用的虛擬地址, 它在訪(fǎng)問(wèn)時(shí)是如何別轉(zhuǎn)成真正的物理地址的?

1. 我們的虛擬地址被分為頁(yè)目錄索引,頁(yè)表索引,字節(jié)偏移三部分
2. 根據(jù)CR3寄存器得到當(dāng)前進(jìn)程的頁(yè)目錄表地址, 根據(jù)頁(yè)目錄索引得到頁(yè)目錄表項(xiàng)目(PDE), 然后就可以得到該頁(yè)表的地址
3. 根據(jù)頁(yè)表索引,得到頁(yè)表項(xiàng)目(PTE)的地址, 然后即可定位到該頁(yè)面, 根據(jù)偏移字節(jié)即可訪(fǎng)問(wèn)真正的物理內(nèi)存


操作系統(tǒng)采用按需換頁(yè)的算法來(lái)實(shí)現(xiàn)內(nèi)存的訪(fǎng)問(wèn), 也就是說(shuō)系統(tǒng)會(huì)在真正訪(fǎng)問(wèn)一個(gè)地址的時(shí)候才會(huì)把該地址轉(zhuǎn)成有效的物理地址, 如果訪(fǎng)問(wèn)失敗, 會(huì)觸發(fā)換頁(yè)異常, 再真正加載該頁(yè)面換到物理內(nèi)存。系統(tǒng)用虛擬地址描述符(VAD, virtual address descriptor)組成的平衡二叉樹(shù)來(lái)跟蹤所有的虛擬內(nèi)存,以確定所有虛擬內(nèi)存的狀態(tài)(free, reserver, commit)和屬性。


下面說(shuō)下應(yīng)用層對(duì)程序內(nèi)存的訪(fǎng)問(wèn), 按照內(nèi)存的用途就可以大概劃分:
Image: 主要是指二進(jìn)制模塊在內(nèi)存中存在方式, 比如Exe和Dll, 對(duì)應(yīng)的API比如LoadLibrary。
Mapped file: 主要是指內(nèi)存映射文件, 可以用來(lái)快速的加載大文件 ,或者跨進(jìn)程共享內(nèi)存, 對(duì)應(yīng)的API比如 CreateFileMapping.
Stack: 每個(gè)線(xiàn)程都有自己的堆棧, 包括用戶(hù)態(tài)堆棧和內(nèi)核堆棧,雖然堆棧內(nèi)存分配有大小限制, 但是非常高效,函數(shù)的局部變量都存在里面,程序的運(yùn)行過(guò)程(函數(shù)的調(diào)用過(guò)程)實(shí)際上是不停的壓棧和出棧的過(guò)程,大小一般默認(rèn)保留1M(參見(jiàn)線(xiàn)程堆棧是如何增長(zhǎng)的)
Heap: 系統(tǒng)有自己的堆管理器, 雖然效率堆內(nèi)存分配效率低, 但是沒(méi)有大小限制, 對(duì)應(yīng)的API比如new, malloc, HeapAlloc


操作系統(tǒng)為我們?cè)L問(wèn)內(nèi)存提供了各種渠道,我們可以根據(jù)需要自己選擇, 由下往上可以分為:
虛擬內(nèi)存: 對(duì)應(yīng)的API如VirtualAlloc(Ex), VirtualFree(Ex), VirtualLock, VirtualProtect, 通過(guò)這些API,我們可以直接分配(reserver, commit)大塊內(nèi)存( 4K頁(yè)面大小), 同時(shí)定義修改頁(yè)面屬性, 這是最高效的大內(nèi)存分配方式。
Win32 堆內(nèi)存: 對(duì)應(yīng)的API如HeapCreate, HeapAlloc, 堆內(nèi)存建立在虛擬內(nèi)存之上,很多時(shí)候我們不需要虛擬內(nèi)存的大塊內(nèi)存,只需要小塊內(nèi)存,操作系統(tǒng)通過(guò)堆管理器幫我們解決了這個(gè)問(wèn)題。每個(gè)進(jìn)程啟動(dòng)時(shí)系統(tǒng)都會(huì)創(chuàng)建一個(gè)默認(rèn)堆,同時(shí)我們也可以創(chuàng)建自己的私有堆, 不同模塊之間是否共享同一個(gè)CRT堆取決于模塊的編譯選項(xiàng),(參見(jiàn)基于WinDbg的內(nèi)存泄漏分析
CRT 堆內(nèi)存:C/C++代碼中我們最常用的內(nèi)存分配方式是malloc和new, 通常情況下malloc只負(fù)責(zé)內(nèi)存分配, 而new在調(diào)用malloc分配內(nèi)存的同時(shí)還有在分配的內(nèi)存上構(gòu)造對(duì)象的功能。至于malloc的實(shí)現(xiàn)方式, 不同的編譯器廠(chǎng)商會(huì)有不同的實(shí)現(xiàn), 有些可能是通過(guò)Win32堆實(shí)現(xiàn),也可能是通過(guò)虛擬內(nèi)存API直接實(shí)現(xiàn)。


思考為什么有了虛擬內(nèi)存API和Win32堆API,還要有CRT堆API?
軟件工程里一條比較經(jīng)典的話(huà)是: 任何問(wèn)題都可以加一個(gè)間接層加以解決。操作系統(tǒng)提供的API都是平臺(tái)相關(guān)的, 通過(guò)CRT這個(gè)間接層實(shí)現(xiàn)了平臺(tái)無(wú)關(guān), 同時(shí)我們可以在這個(gè)間接層上做很多事情, 比如內(nèi)存泄漏跟蹤, 實(shí)現(xiàn)自己的內(nèi)存池等。


如果我們直接調(diào)用虛擬內(nèi)存API分配內(nèi)存, 這種內(nèi)存屬于那種類(lèi)型?
實(shí)際上按照VMMap的說(shuō)法, 內(nèi)存類(lèi)型還有更多: Image, Mapped File, Shareable, Heap, Managed Heap, Stack, Private Data, Page Table, Unusable, Free.
直接通過(guò)VirtualAlloc分配的內(nèi)存不屬于Heap, 應(yīng)該屬于Private Data.
posted on 2016-04-07 21:45 Richard Wei 閱讀(3367) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): windows desktop

FeedBack:
# re: Windows內(nèi)存小結(jié)
2016-04-08 21:31 | anna
任何問(wèn)題都可以加一個(gè)間接層加以解決!  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品视频在线| 欧美99在线视频观看| 欧美午夜精品一区| 亚洲一区二区三区四区五区黄| 亚洲欧美日韩直播| 国产日韩欧美精品在线| 久久久xxx| 亚洲精品免费看| 亚洲男人天堂2024| 激情婷婷久久| 欧美久久电影| 欧美一区三区三区高中清蜜桃| 欧美成人有码| 亚洲在线观看视频网站| 国产真实乱子伦精品视频| 欧美成人在线免费观看| 亚洲一区二区少妇| 欧美激情精品久久久久久免费印度| 9色精品在线| 国产一区二区三区视频在线观看| 欧美成人免费全部| 亚洲一区视频在线观看视频| 欧美成人一区二免费视频软件| 亚洲一区二区三区激情| 国产有码在线一区二区视频| 欧美日韩国产在线播放| 久久国产视频网站| 一本大道久久a久久精二百| 久久久久一区二区三区四区| 在线视频一区观看| 一区在线播放| 国产精品视频网址| 欧美激情1区2区| 久久狠狠亚洲综合| 中日韩午夜理伦电影免费| 欧美福利小视频| 久久精品人人做人人爽电影蜜月| 日韩视频一区二区三区在线播放免费观看| 国产欧美一区二区三区在线老狼| 欧美激情第8页| 久久久久一区二区| 新片速递亚洲合集欧美合集| 日韩一级不卡| 亚洲国产日本| 你懂的亚洲视频| 香蕉精品999视频一区二区| 日韩视频二区| 亚洲精品国产拍免费91在线| 好吊色欧美一区二区三区四区| 国产精品porn| 欧美日韩在线直播| 欧美精品一区二区三区很污很色的| 久久精品国产在热久久| 亚洲欧美日本在线| 亚洲一区二区av电影| 亚洲作爱视频| 99天天综合性| 99pao成人国产永久免费视频| 欧美成人午夜影院| 欧美电影在线| 欧美成人午夜| 亚洲电影专区| 欧美激情无毛| 亚洲国产视频一区| 亚洲电影免费在线观看| 亚洲高清不卡| 亚洲高清影视| 亚洲区中文字幕| 亚洲毛片一区二区| 最新亚洲视频| 亚洲乱码一区二区| 一区二区三区国产在线| 99热这里只有精品8| 一片黄亚洲嫩模| 亚洲图片在线观看| 亚洲欧美自拍偷拍| 久久www免费人成看片高清 | 亚洲精品麻豆| 亚洲精品国产拍免费91在线| 亚洲精品视频二区| 夜夜躁日日躁狠狠久久88av| 一区二区三区四区五区在线| 亚洲在线观看视频| 欧美亚洲综合网| 久久久久亚洲综合| 欧美高清在线一区| 欧美日韩在线观看一区二区| 国产精品久久一级| 国产日韩欧美不卡在线| 韩日精品在线| 亚洲伦理在线免费看| 宅男精品视频| 久久国产精品99久久久久久老狼| 老牛嫩草一区二区三区日本| 亚洲国产美女久久久久| 99国产精品久久久| 性色av一区二区三区在线观看| 欧美制服丝袜| 欧美福利电影在线观看| 国产精品久久久久久久午夜| 狠狠狠色丁香婷婷综合激情| 亚洲乱码日产精品bd| 午夜久久久久久| 欧美**人妖| 亚洲图片欧美一区| 久久免费精品日本久久中文字幕| 欧美日韩精品系列| 国产在线精品二区| 亚洲精品视频免费| 久久精品99国产精品酒店日本| 欧美国产一区二区| 亚洲欧美韩国| 欧美精品在线观看91| 国产日本欧美一区二区三区在线| 91久久久久久久久久久久久| 香蕉尹人综合在线观看| 亚洲二区在线观看| 亚洲欧美色婷婷| 欧美伦理91i| 国产一区二区三区日韩欧美| 一区二区三区四区蜜桃| 美女主播一区| 亚洲综合电影一区二区三区| 欧美高清视频在线播放| 国产一区二区日韩| 亚洲永久在线| 亚洲欧洲视频| 久久嫩草精品久久久久| 国产精品视频在线观看| 99精品视频免费| 麻豆精品视频在线| 香蕉成人久久| 国产精品任我爽爆在线播放| 99riav久久精品riav| 麻豆九一精品爱看视频在线观看免费 | 麻豆精品一区二区综合av| 国产精品99久久久久久久vr| 欧美大片91| 亚洲电影免费观看高清完整版在线 | 好吊日精品视频| 久久成人精品无人区| 一区二区福利| 欧美日韩在线视频首页| 亚洲毛片在线免费观看| 欧美激情亚洲| 老司机成人网| 亚洲黄色成人| 欧美成人高清| 久久婷婷色综合| 在线视频观看日韩| 另类成人小视频在线| 久久国产天堂福利天堂| 国产亚洲一本大道中文在线| 欧美一级视频精品观看| 亚洲一区在线观看视频| 国产精品入口夜色视频大尺度| 在线一区二区三区做爰视频网站| 亚洲精品男同| 欧美另类女人| 亚洲一区二区三区中文字幕| 99精品国产一区二区青青牛奶| 免费在线成人| 日韩网站在线观看| 99国产精品久久| 欧美视频免费在线观看| 亚洲综合首页| 午夜精品国产精品大乳美女| 国产一区二区高清| 久热精品视频在线观看| 久久综合九色综合久99| 亚洲精品少妇网址| 亚洲美女在线看| 国产精品婷婷| 久久午夜视频| 欧美成人首页| 亚洲欧美一区二区在线观看| 午夜精品亚洲一区二区三区嫩草| 国产日韩欧美一区二区| 裸体丰满少妇做受久久99精品| 老牛嫩草一区二区三区日本| 日韩视频精品在线观看| 亚洲网址在线| 在线成人av.com| 亚洲三级视频| 国产欧美日本| 欧美福利在线观看| 欧美特黄一级大片| 久久久久国产精品麻豆ai换脸| 久久一区精品| 亚洲午夜精品网| 久久国产直播| 中文日韩电影网站| 欧美一区二区三区在线观看视频 | 欧美亚洲视频一区二区| 欧美一区二区视频免费观看| 亚洲精品乱码久久久久久| 中文精品视频| 在线精品国精品国产尤物884a| 亚洲精品一区二区三区在线观看| 国产欧美一区二区三区国产幕精品 |