windows記憶體管理和API函式
windows記憶體管理知識:
1.分段或分頁記憶體管理
2.實體地址和虛擬地址,虛擬地址空間.
3.虛擬記憶體佈局,記憶體分工,堆,棧.
4.記憶體存取許可權.
5.標準C記憶體管理函式與windows記憶體管理API的關係.
記憶體保護屬性和存取許可權
屬性常量 意義
PAGE_EXECUTE 可執行
PAGE_EXECUTE_READ 可讀,可執行
PAGE_EXECUTE_READWRITE 可讀,可寫,可執行
PAGE_EXECUTE_WRITECOPY 可讀,可寫,可執行,以Read-on-write和copy-on-write方式共享
PAGE_NOACCESS 不可訪問
PAGE_READONLY 只讀
PAGE_READWRITE 可讀,可寫
PAGE_WRITECOPY copy-on-write保護機制
PAGE_GUARD 保護,如果訪問則異常(不能單獨使用)
PAGE_NOCACHE 不進行CPU快取(不能單獨使用)
PAGE_WRITECOMBINE write-combined優化(不能單獨使用)
堆管理API
HeapCreate 為程式建立一個堆,返回一個堆控制程式碼
GetProcessHeap 獲取當前程式中的一個堆
HeapAlloc 從指定堆上分配記憶體塊
HeapReAlloc 重新分配記憶體,改變已經分配好的堆記憶體塊大小
GetSystemInfo 獲取系統資訊
HeapSize 獲取指定堆大小,以位元組為單位返回堆大小資訊
HeapFree 釋放HeapAlloc和HeapReAlloc所分配的記憶體
HeapDestroy 銷燬由HeapCreate建立的堆
全域性和區域性記憶體管理API函式
GlobalAlloc 在預設堆上分配指定屬性的大小的記憶體
GlobalFree 釋放由GlobalAlloc分配的記憶體
GlobalReAlloc 重新分配記憶體,改變已經分配好的記憶體塊大小
GlobalLock 將GlobalAlloc及GlobalReAlloc分配屬性為GMEM_MOVEABLE記憶體塊設為固定
GlobalHandle 與GlobalLock相對
GlobalSize 獲取記憶體大小
虛擬記憶體管理API函式
VirtualAlloc "保留"或"提交"記憶體頁面,將"空閒的"記憶體頁面變為"保留的"或"已經提交的",保留的改為已提交的
VirtualAllocEx 類似VirtualAlloc功能,不過可以為其他程式分配記憶體
VirtualFree 將記憶體狀態從"已經提交的"變為"保留的"
VirtualFreeEx 釋放VirtualAllocEx分配的記憶體,功能,使用方法和VirtualFree類似
VirtualProtect 改變指定虛擬記憶體分頁的保護屬性
記憶體操作與記憶體資訊管理API函式
CopyMemory 複製記憶體,第一個引數為目的地址,第二個引數為源地址,第三個引數為複製資料大小
FillMemory 填充記憶體,將一段記憶體填充為同一個值
MoveMemory 功能和CopyMemory類似,不同的是源地址和目的地址可以相同
ZeroMemory 將指定記憶體區域清零
GlobalMemoryStatusEx 用於獲取系統當前記憶體使用情況
IsBadCodePtr 判斷呼叫程式是否擁有對指定地址記憶體的讀操作許可權
IsBadReadPtr 判斷呼叫程式是否有對指定地址段記憶體的讀操作許可權
ISBadStringPtr 判斷呼叫程式是否擁有對字串指標的讀取許可權
IsBadWritePtr 判斷呼叫程式是否擁有對指定地址段記憶體的寫操作許可權
HeapCreate:
The HeapCreate function creates a heap object that can be used by the calling process. The function reserves space in the virtual address space of the process and allocates physical storage for a specified initial portion of this block.
GlobalAlloc:
The GlobalAlloc function allocates the specified number of bytes from the heap. Win32 memory management does not provide a separate local heap and global heap.
This function is provided only for compatibility with 16-bit versions of Windows.
VirtualAlloc:
The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero, unless the MEM_RESET flag is set.
所以說,HeapCreate和GlobalAlloc無本質的區別,只是GlobalAlloc是為了相容16位程式而存在的。
而VirtualAlloc是比較底層的記憶體操作了,請注意函式返回的是LPVOID,從某種意義上來說,使用Virtual系列的函式,您可以實現程式自己的記憶體管理模式了。
相關文章
- Windows記憶體管理-分段Windows記憶體
- 共享記憶體函式記憶體函式
- Windows記憶體管理-分頁Windows記憶體
- Windows記憶體管理分析(一)Windows記憶體
- Windows記憶體管理分析(二)Windows記憶體
- Windows CE記憶體管理 (轉)Windows記憶體
- 常用記憶體操作函式記憶體函式
- Delphi 的記憶體操作函式(5): 複製記憶體記憶體函式
- 手撕記憶體操作函式記憶體函式
- 胡扯JS系列-記憶體模型和函式執行JS記憶體模型函式
- fork函式中的記憶體複製和共享函式記憶體
- 記憶體管理 記憶體管理概述記憶體
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- Windows API GetUserNameEx 函式使用WindowsAPI函式
- SGA和PGA記憶體管理記憶體
- 核心記憶體分配常用函式使用記憶體函式
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 《Windows核心情景分析》讀書筆記:windows記憶體管理Windows筆記記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 【Java基礎】函式引數為物件時的記憶體管理Java函式物件記憶體
- 段頁式記憶體管理(轉載)記憶體
- 【記憶體管理】記憶體佈局記憶體
- Node - 記憶體管理和垃圾回收記憶體
- JVM記憶體管理和垃圾回收JVM記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- 第六章——函式(自動閉包和記憶體)函式記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- 虛擬函式的記憶體佈局(上)函式記憶體
- 理解 iOS 和 macOS 的記憶體管理iOSMac記憶體
- optee記憶體管理和頁表建立記憶體
- Linux-記憶體和磁碟管理Linux記憶體
- 儲存類別和記憶體管理記憶體