WINDOWS 內存管理筆記

以下內容摘抄自《精通windows API函數、接口編程實例》

在編寫應用程序時,程序員不用過多地考慮系統底層是如何實現這種機制的。在進行應 用程序開發時,開發人員只需要瞭解以下內容。
(1)虛擬地址空間中的數據是分頁管理的。
(2)應用程序不用考慮系統中其他應用程序的內存使用情況,如佔用了多少內存、佔用 了哪些內存等。
(3)虛擬地址並不是物理地址空間中的地址,不是數據在內存中真實存在的地址,操作 系統會將進程的虛擬地址映射到真實的物理內存的地址。
(4)進程也不用考慮真實的物理內存有多大,只需要瞭解可以使用 2GB(一般情況下) 的內存,操作系統負責轉換。
(5)如果系統中沒有足夠的物理內存供使用,那麼操作系統會將當前沒有使用的內存分 頁“調度”到硬盤上保存起來。頁面調度不會造成內存中的數據在虛擬地址空間中地址的改 變,所以進程不需要知道內存分頁是如何調度的,不需要知道內存中保存的數據是在內存中 還是在硬盤上,只需要知道其虛擬地址就可以了。

虛擬內存佈局、內存的分工、堆與棧

 進程的虛擬內存空間分爲兩個部分,低 2GB(或 3GB_)由應用程序使用,高 2GB(或 1GB) 由系統內核程序使用。 
 系統內核的內存空間中包括驅動程序,系統內核可執行程序、用於內存管理的數據結構(頁 目錄、頁表等),用於進程管理、線程調度的數據結構、各種中斷處理程序,系統緩存等。     
 應用程序可使用的低地址空間中包括了應用程序的代碼、數據(全局變量等)、系統和 用戶 DLL 的代碼、各線程的棧、堆等。     
 棧和堆是兩種重要的內在管理形式。     
 進程的每個線程都有自己的棧,棧與函數的調用、執行和返回及局部變量的保存相關, 一般情況下,棧中保存着函數的參數、返回地址和局部變量,調用函數將參數入棧,調用指 令將函數返回地址入棧,被調用函數負責保存調用函數的相關棧指針,爲局部變量分配空間 等,而堆是一種可以動態分配和釋放的內存,由堆管理器進行管理,用戶在程序中使用的內 存分配函數都是通過堆進行分配的。  
發佈了23 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章