//建立堆; 注意建立時(shí)指定的尺寸也是按頁(yè)大小(PageSize)對齊的, 譬如指定 15k, 實(shí)際會(huì )分配 16K.HeapCreate( flOptions: DWORD; {堆屬性選項, 見(jiàn)下表} dwInitialSize: DWORD; {初始尺寸, 單位是字節; 該大小會(huì )被直接提交到實(shí)際的內存} dwMaximumSize: DWORD {最大尺寸, 如果不限定最大值就設為 0}): THandle; {返回堆句柄; 失敗返回 0, 但如果參數 flOptions 允許了異常, 失敗會(huì )返回異常標識}//flOptions 參數可選值:HEAP_NO_SERIALIZE = 1; {非互斥, 此標記可允許多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)此堆}HEAP_GENERATE_EXCEPTIONS = 4; {當建立堆出錯時(shí), 此標記可激發(fā)一個(gè)異常并返回異常標識}HEAP_ZERO_MEMORY = 8; {把分配的內存初始化為 0}//flOptions 參數指定有 HEAP_GENERATE_EXCEPTIONS 時(shí), 可能返回的異常:STATUS_ACCESS_VIOLATION = DWORD($C0000005); {參數錯誤}STATUS_NO_MEMORY = DWORD($C0000017); {內存不足}
//銷(xiāo)毀堆HeapDestroy(hHeap: THandle {堆句柄}): BOOL; {}
//從堆中申請內存HeapAlloc( hHeap: THandle; {堆句柄} dwFlags: DWORD; {內存屬性選項, 見(jiàn)下表} dwBytes: DWORD {申請內存的大小, 單位是字節}): Pointer; {返回內存指針; 失敗返回 0 或異常, 情況和建立堆是一樣}//dwFlags 參數可選值:HEAP_NO_SERIALIZE = 1; {非互斥, 此標記可允許多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)此堆}HEAP_GENERATE_EXCEPTIONS = 4; {當建立堆出錯時(shí), 此標記可激發(fā)一個(gè)異常并返回異常標識}HEAP_ZERO_MEMORY = 8; {把分配的內存初始化為 0}{能看出這和堆的屬性選項是一樣的; 如果 dwFlags 參數設為 0, 將使用堆的屬性; 如果重新指定將覆蓋堆的屬性}{另外: 如果堆是默認堆, 也就是堆句柄來(lái)自 GetProcessHeap, dwFlags 參數會(huì )被忽略}
//改變堆內存的大小, 也就是重新分配HeapReAlloc( hHeap: THandle; {句柄} dwFlags: DWORD; {內存屬性選項; 該參數比 HeapAlloc 多出一個(gè)選項, 見(jiàn)下表} lpMem: Pointer; {原內存指針} dwBytes: DWORD {新的尺寸}): Pointer; {同 HeapAlloc}//dwFlags 參數可選值:HEAP_NO_SERIALIZE = 1; {非互斥, 此標記可允許多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)此堆}HEAP_GENERATE_EXCEPTIONS = 4; {當建立堆出錯時(shí), 此標記可激發(fā)一個(gè)異常并返回異常標識}HEAP_ZERO_MEMORY = 8; {把分配的內存初始化為 0}HEAP_REALLOC_IN_PLACE_ONLY = 16; {此標記不允許改變原來(lái)的內存位置}
//獲取堆中某塊內存的大小HeapSize( hHeap: THandle; {堆句柄} dwFlags: DWORD; {內存屬性; 可選值是 0 或 HEAP_NO_SERIALIZE, 后者可確保同步訪(fǎng)問(wèn)} lpMem: Pointer {內存指針}): DWORD; {成功返回字節為單位的大小; 失敗返回 $FFFFFFFF}
//釋放堆中指定的內存塊HeapFree( hHeap: THandle; {堆句柄} dwFlags: DWORD; {內存屬性; 可選值是 0 或 HEAP_NO_SERIALIZE} lpMem: Pointer {內存指針}): BOOL; {}
//驗證堆HeapValidate( hHeap: THandle; {} dwFlags: DWORD; {} lpMem: Pointer {}): BOOL; {}
//整理堆HeapCompact( hHeap: THandle; {} dwFlags: DWORD {}): UINT; {}
//鎖定堆HeapLock( hHeap: THandle {}): BOOL; {}
//鎖定后的解鎖HeapUnlock( hHeap: THandle {}): BOOL; {}
//列舉堆中的內存塊HeapWalk( hHeap: THandle; {} var lpEntry: TProcessHeapEntry {}): BOOL; {}
舉例放下篇吧.聯(lián)系客服