記憶體分配的幾個函式的簡單對比分析

2021-09-25 06:41:24 字數 696 閱讀 5396

很久之前在看《改善c++程式的150個建議》一書,了解到在棧上也可以動態分配記憶體,具體的方法是

通過alloca函式來完成。再次複習檢視了一下c語言中的幾個分配記憶體的函式,簡單記錄一下它們的異同點:

1  void* malloc(unsigned size);

向系統申請分配size個位元組的記憶體空間,在堆中分配,分配後的記憶體空間必須在使用完後使用free函式釋放。注意點,所分配的

記憶體空間的內容是未處理過的,內容值不確定。

2 void* calloc(size_t nelem,size_t elsize);

該函式向系統申請分配乙個能容納nelem個元素,每個元素大小為elsize位元組的記憶體空間,在堆中分配,一樣要使用free來釋放。

和malloc不同的是,calloc函式分配好記憶體後,使用0初始化分配好的記憶體空間。

3 void *alloca(size_t size);

該函式從呼叫者的棧上分配size個位元組的記憶體空間,不必使用free來釋放,這個臨時分配的空間會在呼叫alloca()的函式返回時自動釋放。

alloca也使用0初始化分配好的記憶體空間,由於是在棧上分配,效率較高,但是所分配空間的大小有限制,而且移植性較差。

4 void *realloc(void *ptr,int size);

該函式用來重調已分配好記憶體空間的大小,可以給所指定的記憶體空間進行擴大或縮小。在堆分配。

windows幾個記憶體分配函式

malloc,operator new,virtualalloc,heapalloc,globalalloc,localalloc malloc malloc是c c 執行期庫函式,它最終呼叫heapalloc從堆裡面分配空間。operator new operator new是c 運算子。它最終呼...

linux記憶體分配slub的幾個疑問

對於slub不熟的同學可以先跳過了,涉及的東西比較細緻。簡單來說slub的結構是n cpu數 個kmem cache cpu,和乙個kmem cache node組成。其中kmem cache cpu的目的是為了從技術層面上提高cpu命中快取,以及在同乙個頁面上不出現乙個髒的記憶體 即不同時被多個c...

關於記憶體分配的幾個例子

1.include include include void getmemory char p void test int main void getmemory char p void test void 分析 在vs2010上編譯可以通過,但是不能執行。個人理解 執行getmemory 時,p是...