1. 基本概念
(1) 地址空間。
系統所有可用的內存地址集合稱爲地址空間。
(2) 物理內存
硬件系統中真實存在的存儲空間稱爲物理內存,物理內存的訪問通過硬件系統的總線進行。但不是每臺32位機都具有4GB的內存空間。
(3) 虛擬地址空間。
爲了訪問內存的統一和方便,操作系統允許其上運行的程序訪問所有4GB的內存空間中的地址。操作系統會做一些轉換的地址轉換工作,將程序的訪問的地址轉換爲物理內存中的真實地址,然後進行數據的存儲。操作系統進行轉換後,供程序使用的地址空間稱爲虛擬地址空間。在32位系統上,可以使用的虛擬地址空間是4GB.
(4) 進程中的內存空間:用戶內存空間與內核內存空間。
WINDOWS操作系統中的每個進程都有屬於自己的虛擬地址空間。32位的windows操作系統將4GB的虛擬內存劃分爲兩個部分,進程使用2GB,稱爲用戶進程空間;內核使用2GB,稱爲系統地址空間或內核地址空間。
需要了解的內容:
(1) 虛擬地址空間中的數據時分頁管理的;
(2) 應用程序不用考慮系統中其他應用程序的內存使用情況,如佔用了多少內存、佔用了哪些內存;
(3) 虛擬地址並不是物理地址空間中的地址,不是數據在內存中的真實存在的地址,操作系統會將進程的虛擬地址映射到真實的物理地址上。
(4) 進程也不用考慮真實的物理地址有多大,只需要知道了解可以使用2GB(一般情況下)的內存,操作系統負責轉換;
(5) 如果系統中沒有足夠的物理內存供使用,那麼操作系統會將當前沒有使用的內存分頁“調度”到硬盤上保存起來。
堆管理API
HeapCreate
GetProcessHeap
GetProcessHeaps
HeapAlloc
HeapReAlloc
GetSystemInfo
HeapSize
HeapFree
HeapDestory
虛擬內存管理
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualFreeEx
VirtualProtect
VirtualLock
VirtualUnlock
內存操作與內存信息管理API
CopyMemory
FillMemory
MoveMemory
ZeroMemory
GlobalMemoryStatusEx
IsBadCodePtr
IsBadReadPtr
IsBadStringPtr
IsBadWritePtr