記憶體配置函數總結

來源:互聯網
上載者:User

 
記憶體配置函數總結
收藏

記憶體分區:

1)、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。
2)、堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。
3)、全域區(靜態區)(static)—,全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區, 未初始化的全域變數和未初始化的靜態變數在相鄰的另一塊地區。 - 程式結束後有系統釋放
4)、常量區—常量字串就是放在這裡的。 程式結束後由系統釋放
5)、代碼區—存放函數體的二進位代碼。

1. VirtualAlloc/VirtualAllocEx

     在虛擬位址空間中保留或提交記憶體, 每次操作大小為Page頁大小(windows一般為4K)的整數倍,
因此需要自己計算記憶體配置演算法(可以使用HeapAlloc或GlobalAlloc由系統自動分配計算),
在沒有使用MEM_RESET的情況下會初始化記憶體塊(0), 
VirtualAllocEx還可以在其他進程中的保留記憶體操作,並使用其對應的VirtualFree/VirtualFreeEx釋放記憶體

2. HeapAlloc/HeapFree

     在指定的Heap中分配記憶體,heap應該由CreateHeap或GetProcessHeap返回, 分配的記憶體不能移動,CreateHeap建立的堆只能在調用的進程中使用,因此如需跨進程調用不能使用此種分配方式,由HeapFree釋放.

3. GlobalAlloc/GlobalFree

      從全域堆分配指定位元組的記憶體,分配的記憶體可跨進程訪問,並使用8位元組對齊, 由GlobalFree釋放, 在使用GlobalAlloc分配的記憶體塊時需調用GlobalLock和GlobalUnlock函數。

      GlobalAlloc函數分配記憶體的速度要比其分的記憶體管理函數慢, 而且沒有提供更多的功能, 因此,建議儘可能用其分的記憶體管理函數分配記憶體,GlobalAlloc函數一般用於動態資料交換(DDE)技術和剪下板操作函數中。

4. malloc/free

     從堆上分配指定大小的位元組數並返回void類弄,如分配失敗則返回NULL,malloc分配的位元組數可能比指定的位元組要多,這是由記憶體對齊決定的, malloc實際上調用了HeapAlloc函數, 因此malloc分配的記憶體也不能跨進程調用。

5. calloc
/free

     分配指定數目的元素, 每個元素的大小由size指定,  並將其初始化為0, calloc調用malloc使用C++ _set_new_mode函數來設定新的處理方式,

預設情況下,malloc

失敗

時不調用分配記憶體的處理常式常式。

6.

realloc/free

    重新分配記憶體並返回void類型, 如果沒有足夠的記憶體擴充記憶體塊,則原來的指向的記憶體指標無變化, 並返回NULL;

    如果重新分配大小設為0, 而釋放原來的記憶體塊, 並返回NULL。

7. _malloca/_alloca/_freea

    從棧中分配指定大小的記憶體塊

8. new/delete

    分配記憶體的對象或數群組類型的對象和返回一個適當類型,並調用對象的建構函式及在delete時調用對象的解構函式。其實現基於malloc調用。

前3個記憶體管理函數是windows系統提供的API函數, 而後面5個是c/c++庫中提供的函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.