windows 記憶體分配方式

2021-06-19 18:25:25 字數 1760 閱讀 7406

win32的堆分配函式 每乙個程序都可以使用堆分配函式建立乙個私有的堆──呼叫程序位址空間的乙個或者多個頁面。dll建立的私有堆必定在呼叫dll的程序的位址空間內,只能被呼叫程序訪問。

heapcreate用來建立堆;heapalloc用來從堆中分配一定數量的空間,heapalloc分配的記憶體是不能移動的;heapsize可以確定從堆中分配的空間的大小;heapfree用來釋放從堆中分配的空間;heapdestroy銷毀建立的堆。

windows傳統的全域性或者區域性記憶體分配函式 由於win32採用平面記憶體結構模式,win32下的全域性和區域性記憶體函式除了名字不同外,其他完全相同。任一函式都可以用來分配任意大小的記憶體(僅僅受可用物理記憶體的限制)。用法可以和win16下基本一樣。

win32下保留這類函式保證了和win16的相容。

c語言的標準記憶體分配函式 c語言的標準記憶體分配函式包括以下函式:

malloc,calloc,realloc,free,等。

這些函式最後都對映成堆api函式,所以,malloc分配的記憶體是不能移動的。這些函式的調式版本為

malloc_dbg,calloc_dbg,realloc_dbg,free_dbg,等。

win32的虛擬記憶體分配函式

虛擬記憶體api是其他api的基礎。虛擬記憶體api以頁為最小分配單位,x86上頁長度為4kb,可以用getsysteminfo函式提取頁長度。虛擬記憶體分配函式包括以下函式:

dword cbsize,

dword fdwallocationtype,

dword fdwprotect);

該函式用來分配一定範圍的虛擬頁。引數1指定起始位址;引數2指定分配記憶體的長度;引數3指定分配方式,取值 mem_commint或者mem_reserve;引數4指定控制訪問本次分配的記憶體的標識,取值為page_readonly、 page_readwrite或者page_noaccess。

lpvoid lpvaddress,

dword cbsize,

dword fdwallocationtype,

dword fdwprotect);

該函式功能類似於virtualalloc,但是允許指定程序process。virtaulfree、virtualprotect、virtualquery都有對應的擴充套件函式。

dword dwsize,

dword dwfreetype);

該函式用來**或者釋放分配的虛擬記憶體。引數1指定希望**或者釋放記憶體的基位址;如果是**,引數2可以指向虛 擬位址範圍內的任何地方,如果是釋放,引數2必須是virtualalloc返回的位址;引數3指定是否釋放或者**記憶體,取值為 mem_decommint或者mem_release。

dword cbsize,

dword fdwnewprotect,

pdword pfdwoldprotect);

該函式用來把已經分配的頁改變成保護頁。引數1指定分配頁的基位址;引數2指定保護頁的長度;引數3指定頁的保護屬性,取值page_read、page_write、page_readwrite等等;引數4用來返回原來的保護屬性。

pmemory_basic_information lpbuffer,

dword dwlength);

該函式用來查詢記憶體中指定頁的特性。引數1指向希望查詢的虛擬位址;引數2是指向記憶體基本資訊結構的指標;引數3指定查詢的長度。

該函式用來鎖定記憶體,鎖定的記憶體頁不能交換到頁檔案。引數1指定要鎖定記憶體的起始位址;引數2指定鎖定的長度。

引數1指定要解鎖的記憶體的起始位址;引數2指定要解鎖的記憶體的長度。

記憶體分配方式

記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的 整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函 數執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指...

記憶體分配方式

記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個 執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執 行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令...

記憶體分配方式

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它與資料結構中的堆是兩回事,分配方...