free真的釋放記憶體了嗎?

2021-09-06 03:37:49 字數 761 閱讀 1937

不要天真的想程式中用了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 返回的並不一定相容,不要...