欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
內存管理[3]
VirtualAlloc 分配的內存是以 4K 為最小單位、連續的內存地址(但映射到真實(shí)的內存時(shí)它不一定是連續的), 前面說(shuō)了, 它不適合分配小內存(譬如只有幾個(gè)字節的變量); 局部的變量在 "棧" 中有程序自動(dòng)管理, 那么那些全局的小變量怎么辦呢? 這就要用到 "堆".

這樣看來(lái), VirtualAlloc 分配的內存既不是 "棧" 也不是 "堆"; VirtualAlloc 分配的內存地址是連續的, "堆" 中內容一般是不連續的, 所以管理 "堆" 比較麻煩, 它是通過(guò)雙線(xiàn)鏈表的結構方式管理的; 程序可以擁有若干個(gè) "堆", 每一個(gè) "堆" 都會(huì )有一個(gè)句柄, 訪(fǎng)問(wèn) "堆" 中的內容時(shí)先要找到這個(gè) "堆", 然后再遍歷鏈表, 這可能就是 "堆" 比 "棧" 慢的根本原因.

在 "堆" 中分配內存(HeapAlloc)前先要建立 "堆"(HeapCreate), 就像程序有默認的 "棧" 一樣, 每一個(gè)程序都有一個(gè)默認建立的 "堆"(可以用 GetProcessHeap 獲取這個(gè) "默認堆" 的句柄), 我們在 Delphi 中用到 "堆" 時(shí), 使用的就是這個(gè) "默認堆". 如果讓程序更靈活地擁有多個(gè) "堆", 必須要用到 API 函數.

建立 "堆" 時(shí)會(huì )同時(shí)提交真實(shí)內存的, 這在申請大內存時(shí)會(huì )很慢, 所以默認堆也只有 1M, 但 "默認堆" 并沒(méi)有限制大小, 它會(huì )根據需要動(dòng)態(tài)增長(cháng).

有了 "默認堆" 還有必要申請其他的 "堆" 嗎? 這只有在多線(xiàn)程中才能體現出來(lái), 和 "棧" 不一樣, 程序會(huì )給每個(gè)線(xiàn)程分配一個(gè) "棧區"; 而 "默認堆" 是進(jìn)程中的所有線(xiàn)程公用的, 當一個(gè)線(xiàn)程使用 "默認堆" 時(shí), 另一個(gè)需要使用 "堆" 的線(xiàn)程就要先掛起等待, 也就是它們不能同時(shí)使用; 只有通過(guò) API 函數重新建立的私有堆才是互不干涉、最有效率的.

先了解一下 "堆" 相關(guān)的函數.
//建立堆; 注意建立時(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;                        {}
舉例放下篇吧.
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
vc 堆管理函數
堆管理
Delphi編程獲取系統當前進(jìn)程名和進(jìn)程ID—用listview和listbox控件分別實(shí)現
深入理解控制臺程序
CSDN技術(shù)中心 Windows管道技術(shù)簡(jiǎn)述
InjectDLL 遠程注入 線(xiàn)程插入
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久