建立輔助堆疊:
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...