關於堆疊 2

2021-08-14 12:53:53 字數 2254 閱讀 4443

建立輔助堆疊:

handle heapcreate(

dword floptions, // heap allocation attributes

size_t dwinitialsize, // initial heap size

size_t dwmaximumsize // maximum heap size

); floptions:0,heap_generate_exceptions,heap_no_serialize

0表示預設設定,堆疊會順序訪問它自己

heap_no_serialize:多個執行緒可以同時訪問堆疊,沒有把握的情況下,最好不要使用該標誌,會造成堆疊資料的破壞

heap_generate_exceptions:在分配或者重新分配堆疊的記憶體嘗試失敗時,會引發乙個異常條件

dwinitialsize:堆疊最初提交到物理儲存器的記憶體大小,如果填入的數值不是cpu頁面大小的倍數,heapcreate會將這個函式圓整為cpu頁面大小的倍數

dwmaximumsize:堆疊的最大大小,如果設定為0,表示沒有上限

在堆疊中分配記憶體

lpvoid heapalloc(

handle hheap, // handle to private heap block

dword dwflags, // heap allocation control

size_t dwbytes // number of bytes to allocate

); hheap:heapcreate返回的堆疊控制代碼

dwflags:可以使用的標誌有0,heap_generate_exceptions,heap_no_serialize,heap_zero_memory,前面3個就不講了,heap_zero_memory表示用0填充記憶體

dwbytes:你想要分配的記憶體位元組數

改變記憶體大小

lpvoid heaprealloc(

handle hheap, // 堆疊控制代碼

dword dwflags, // heap reallocation options

lpvoid lpmem, // 想要改變大小的記憶體位址

size_t dwbytes // 想要分配的位元組數

); dwflags:除了heapalloc可以使用的標誌之外還有乙個heap_realloc_in_place_only,這個標誌告訴函式,當記憶體擴大時,不移動記憶體塊

獲取記憶體塊的大小

dword heapsize(

handle hheap,

dword dwflags, //0或者heap_no_serialize

lpcvoid lpmem // 想要獲取大小的記憶體位址的指標

);釋放記憶體塊

bool heapfree(

handle hheap,

dword dwflags, //0或者heap_no_serialize

lpvoid lpmem // 想要釋放的記憶體的位址

);撤銷堆疊

bool heapdestroy(

handle hheap

);如果程序中含有多個堆疊,可以用這個函式獲取多個堆疊的控制代碼

dword getprocessheaps(

dword numberofheaps, // 堆疊控制代碼陣列的最大容量

phandle processheaps // 堆疊控制代碼陣列

);驗證堆疊的完整性

bool heapvalidate(

handle hheap, //

dword dwflags, // 只能為0或者heap_no_serialize

lpcvoid lpmem // 如果這個引數為null,就驗證整個堆疊的完整性,否則就驗證某塊記憶體的有效性

);合併位址中的空閒記憶體塊,收回不包含已經分配的記憶體塊的物理儲存器頁面

uintheapcompact(

handle hheap,

dword dwflags // 只能為0或者heap_no_serialize

);鎖定堆疊

bool heaplock(handle hheap);

boolheapunlock(handle hheap);

這兩個函式時用於執行緒同步的,當某個執行緒呼叫了heaplock函式時,該執行緒就成為了這個堆疊的擁有者,其他執行緒一旦呼叫就會進入暫停狀態,直到使用heapunlock

關於靜態儲存區域,堆,棧

有關動態物件建立 一般來說,編譯器將記憶體分為三部分 靜態儲存區域 棧 堆。靜態儲存區主要儲存 全域性變數和靜態變數,棧儲存呼叫函式相關的變數 位址等,堆儲存動態生成的變數,在c中是指由malloc,free運算產生釋放的儲存空間,在c 中 就是指new和delete運算子作用的儲存區域。1 靜態儲...

關於堆疊的簡單分析

關於堆疊的簡單分析 片 public static void main string args private static void swap integer num1,integer num2 執行結果 before swap a 1,b 2 after swap a 1,b 2 大家會發現其中...

關於對堆疊的理解

棧區 stack 是由系統或者編譯器進行分配和釋放,存放區域性變數的值 函式的引數值等,操作方式類似於資料結構中的棧。堆區 heap 一般是由程式設計師自己進行分配記憶體空間和釋放的,假設程式設計師沒有對其進行釋放,在程式結束時,有時候作業系統會對其進行系統 操作方式類似於鍊錶。全域性區 靜態區st...