很久之前在看《改善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是...