不要天真的想程式中用了free之後,你的程式就會把記憶體還給了作業系統。從事c程式設計的人應該要知道,我們所用
的malloc和free是由glibc提供的。glibc是乙個具有系統級感覺的使用者級程式,負責管理記憶體堆區。所以到底把free的
記憶體還給還是沒還給作業系統,大家還是看malloc和free的原始碼比較好。
現在就交大家測試一下malloc和free的方法。
01 #include
02 #include
03 04
char*ch
[1000
];05
06 int
main(
intargc
,char
*argv
)07
終端1:
gcc test.c
./a.out 32768
之後不要敲擊任何鍵
終端2:
ps v -c a.out
我測試的時候,記憶體利用率大概為8%
之後,在終端1上敲擊一下回車,程式會呼叫free釋放記憶體。
在終端2上重新鍵入ps v -c a.out,會發現記憶體利用率並沒有下降還是8%(看到了吧,free之後是什麼樣子,並沒有
變)。當我們把32768換成65536再試試,你就會發現不一樣的情況。看樣子glibc在釋放的時候是做了閾值限制的,大於
64k的記憶體塊才是被真正的釋放。當然這只是glibc其中的冰山一角。具體那些小一些的塊是如何處理的,大家就自
己研究吧。
Malloc與free記憶體的分配和釋放
malloc函式 用於分配記憶體 例 double ptd ptd double malloc 30 sizeof double 這個例子 請求 30個double型別值得空間,並且把ptd指向該空間所在位置,注意ptd是作為指向乙個double型別值得指標宣告,而不是指向30個double型別值得...
動態記憶體 free函式釋放記憶體時可能出現的問題
一 什麼是動態記憶體的申請和釋放?當程式執行到需要乙個動態分配的變數時,必須向系統申請取得堆中的一塊所需大小的儲存空間,用於儲存該變數。當不再使用該變數時,也就是它的生命結束時,要顯式釋放它所占用的儲存空間,這樣系統就能對該堆空間進行再次分配,做到重複使用有限的資源。二 我們先來看看幾個基本的關於申...
C中的動態記憶體分配和釋放 free
c 整合 new 和 delete 操作進行動態記憶體分配,但是在 c 語言中無效。c 語言中使用函式庫來解決,即在頭 在 c 中稱為 中定義的函式 malloc,calloc realloc,free 這些函式在 c 中依然有效。但是使用上面函式分配的記憶體塊和用 new 返回的並不一定相容,不要...