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

以前寫過一篇理解程序內存, 當時主要是針對用戶態,下面再稍微深入一點:


我們以32位程序為例(不啟用AWE), 總共4G虛擬空間,其中低2G屬于用戶態, 高2G屬于操作系統內核, 每個程序都有自己的低2G用戶空間, 高2G內核空間是所有程序共享的。高2G內核空間中, 屬于同一Session的程序又共享相同的session空間:


x86系統所有的內存以64K邊界粒度, 4K頁面大小分配。


用戶態的內存空間,按用途分可以分為: image, mapped file, heap, stack, free等
按狀態分可以分為:Free, reserved, commit;
Commit的內存,在被訪問時又可能以不同的狀態存在, 可能是已經提交到物理內存(RAM),也可能是已頁文件的形式存在后臺, 如果是頁文件形式,訪問時會觸發換頁操作。


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


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


我們程序里使用的虛擬地址, 它在訪問時是如何別轉成真正的物理地址的?

1. 我們的虛擬地址被分為頁目錄索引,頁表索引,字節偏移三部分
2. 根據CR3寄存器得到當前進程的頁目錄表地址, 根據頁目錄索引得到頁目錄表項目(PDE), 然后就可以得到該頁表的地址
3. 根據頁表索引,得到頁表項目(PTE)的地址, 然后即可定位到該頁面, 根據偏移字節即可訪問真正的物理內存


操作系統采用按需換頁的算法來實現內存的訪問, 也就是說系統會在真正訪問一個地址的時候才會把該地址轉成有效的物理地址, 如果訪問失敗, 會觸發換頁異常, 再真正加載該頁面換到物理內存。系統用虛擬地址描述符(VAD, virtual address descriptor)組成的平衡二叉樹來跟蹤所有的虛擬內存,以確定所有虛擬內存的狀態(free, reserver, commit)和屬性。


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


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


思考為什么有了虛擬內存API和Win32堆API,還要有CRT堆API?
軟件工程里一條比較經典的話是: 任何問題都可以加一個間接層加以解決。操作系統提供的API都是平臺相關的, 通過CRT這個間接層實現了平臺無關, 同時我們可以在這個間接層上做很多事情, 比如內存泄漏跟蹤, 實現自己的內存池等。


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

FeedBack:
# re: Windows內存小結
2016-04-08 21:31 | anna
任何問題都可以加一個間接層加以解決!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美va亚洲va香蕉在线| 久久久最新网址| 欧美精品一区二区在线播放| 国内久久婷婷综合| 六月婷婷一区| 欧美chengren| 亚洲性感激情| 久久xxxx| 日韩一区二区精品在线观看| 亚洲国产老妈| 欧美性淫爽ww久久久久无| 制服丝袜激情欧洲亚洲| 亚洲欧美电影院| 在线精品视频一区二区三四| 亚洲高清在线| 国产精品视频观看| 欧美国产高潮xxxx1819| 欧美日韩网址| 久久天天躁狠狠躁夜夜av| 麻豆国产精品777777在线| 亚洲一区二区毛片| 久久久久五月天| 亚洲视频www| 久久午夜羞羞影院免费观看| 99视频超级精品| 欧美在线视频一区二区三区| 亚洲日本成人女熟在线观看| 亚洲视频在线一区观看| 在线观看一区视频| 亚洲性图久久| 亚洲免费激情| 久久一二三国产| 亚洲欧美日韩精品在线| 老司机成人网| 久久国产精品久久国产精品| 欧美喷水视频| 亚洲第一视频网站| 国产最新精品精品你懂的| 亚洲精品中文字幕女同| 在线精品国精品国产尤物884a| 制服丝袜激情欧洲亚洲| 亚洲成色www久久网站| 亚洲中午字幕| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产日韩欧美精品综合| 亚洲国产清纯| 亚洲国产精品成人综合| 欧美一区二区三区在| 亚洲欧美日韩精品在线| 欧美日韩精品一区| 亚洲狠狠丁香婷婷综合久久久| 黄色小说综合网站| 亚洲欧美日韩国产中文| 亚洲欧美网站| 国产精品视频专区| 一本色道久久综合一区| 99pao成人国产永久免费视频| 蜜桃av久久久亚洲精品| 麻豆精品精华液| 国产亚洲成av人片在线观看桃| 亚洲一区中文| 欧美一区二区三区免费视| 欧美性做爰猛烈叫床潮| 一区二区三区视频观看| 中文日韩在线视频| 国产精品爱久久久久久久| 亚洲毛片在线| 亚洲欧美成人一区二区三区| 欧美日韩免费一区| 亚洲视频图片小说| 香蕉乱码成人久久天堂爱免费 | 久久久激情视频| 久久久久久尹人网香蕉| 国产午夜精品视频免费不卡69堂| 亚洲免费在线精品一区| 欧美一区二区视频在线观看2020 | 欧美xxx在线观看| 亚洲三级性片| 亚洲影院色无极综合| 国产免费观看久久黄| 欧美在线中文字幕| 欧美激情第五页| 亚洲最新视频在线| 国产精品美女久久久久久久| 亚洲一区图片| 免费久久精品视频| 99精品欧美| 国产麻豆视频精品| 美女成人午夜| 亚洲美女av网站| 久久不射电影网| 91久久国产综合久久蜜月精品| 欧美精品一区二区在线播放| 中文一区二区在线观看| 久久综合九色综合欧美狠狠| 亚洲三级影院| 国产午夜精品久久久| 免费久久99精品国产自| 亚洲一区二区在线看| 欧美高清视频| 欧美影院在线| 亚洲精品永久免费| 国产精品女人网站| 你懂的国产精品永久在线| 亚洲无人区一区| 亚洲大胆av| 久久精品男女| 99精品国产在热久久| 国内外成人免费激情在线视频网站| 欧美黄色成人网| 欧美一区免费| 中文国产亚洲喷潮| 欧美激情在线播放| 久久精品在线观看| 亚洲欧美日韩精品综合在线观看| 亚洲高清不卡一区| 国产午夜精品美女视频明星a级| 欧美日韩大片| 免费欧美日韩| 久久精品国产亚洲aⅴ| 亚洲少妇一区| 9l视频自拍蝌蚪9l视频成人| 免费国产一区二区| 久久久久九九视频| 羞羞色国产精品| 亚洲视频欧美在线| aa日韩免费精品视频一| 亚洲高清在线| 精品51国产黑色丝袜高跟鞋| 国产精品一国产精品k频道56| 欧美日韩免费一区| 欧美国产免费| 欧美成人高清| 欧美黄色网络| 欧美电影美腿模特1979在线看| 久久美女艺术照精彩视频福利播放| 亚洲视频在线一区观看| 夜夜嗨av一区二区三区四区| 亚洲乱码久久| 日韩视频免费在线| a91a精品视频在线观看| 一区二区三区视频观看| 在线亚洲伦理| 午夜精品剧场| 欧美尤物一区| 久久久不卡网国产精品一区| 久久成人羞羞网站| 久久综合精品一区| 欧美激情一区二区三区蜜桃视频 | 国产欧美视频一区二区| 国产精品实拍| 国产在线精品自拍| 激情小说亚洲一区| 亚洲国产欧美一区二区三区同亚洲| 在线播放国产一区中文字幕剧情欧美| 黄色亚洲在线| 亚洲伦理在线| 亚洲免费在线视频| 久久精品成人| 亚洲电影第三页| 日韩视频一区二区三区在线播放| 日韩视频在线免费观看| 在线视频日韩精品| 久久国产精品久久久久久| 麻豆91精品| 欧美日韩亚洲一区二| 国产伦精品一区二区三区照片91 | 裸体素人女欧美日韩| 欧美成人精品一区二区| 亚洲免费观看高清完整版在线观看| 亚洲精品视频免费| 欧美一区二视频在线免费观看| 久久综合网络一区二区| 欧美精品一区二区三区在线播放| 国产精品乱码一区二三区小蝌蚪| 国产欧美一区二区精品婷婷 | 亚洲欧洲精品一区二区三区波多野1战4 | 欧美一级夜夜爽| 欧美gay视频激情| 99riav久久精品riav| 久久精品99无色码中文字幕| 欧美不卡福利| 国产区精品在线观看| 亚洲黄色在线| 欧美一级大片在线免费观看| 免费看精品久久片| 亚洲一区二区三区在线观看视频 | 校园激情久久| 欧美精品日韩一本| 国产一本一道久久香蕉| 中文国产成人精品| 欧美高清视频www夜色资源网| 亚洲欧美国产日韩中文字幕| 欧美国产第二页| 一区精品在线| 久久精品国产一区二区三| 亚洲伦伦在线| 欧美国产日韩在线观看| 狠狠干成人综合网| 性视频1819p久久|