是今天和朋友討論的問題,用free看到的內存在減少,但是看/proc/meminfo 的可用內存卻沒有減少,但是實際情況是他們的應用跑著跑著內存最后就消耗完了,難搞的是復現需要十來天。
meminfo里面的memavailable 屬性表示的是可以用的內存大小,它是估計出來的值,并不是一個準確值。 ?
那如果我想確認某個進程有沒有出現內存泄漏,我要怎么確認? 這類問題我一般是遇到的時候才會去分析,進程一般會有自己的進程號,比較簡單的辦法就是用top -p進程號判斷。
也可以去看/proc/
實例:

運行:
gccmemory.c && a.out
查看屬性:

free 看到的內存信息是從meminfo里面解析出來的,所以要看系統的具體內存占用,還是要看meminfo,但是meminfo里面有很多很多屬性,很少有人能夠非常明白的說明清楚。
我嘗試說下幾個通常見到的
MemTotal
這是內存條大小的容量,但是我們往往看到這個值和我們的內存條大小不同,比如,硬件設計的時候告訴我們使用的內存條大小是2GB,實際上這里可能不是2GB,那是因為系統是開機的時候在bootloader,或者其他部分占用了一部分。
MemFree
系統剩余內存大小,MemTotal - MemFree 就是已經使用的內存大小。
MemAvailable
這是一個估算值,并不是精確值。
我們看到的剩余內存MemFree大小,并不是我們系統應用程序可以分配的內存大小,系統中存在的緩存cache/buffer、slab回收內存系統可以從其他地方摳一些內存出來再加上MemFree就等于MemAvailable,應用程序就可以判斷這個數值判斷自己應該申請的內存空間。
審核編輯:劉清
-
內存條
+關注
關注
0文章
152瀏覽量
19976 -
Cache
+關注
關注
0文章
129瀏覽量
28955 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3683
原文標題:我的內存去哪了?
文章出處:【微信號:嵌入式與Linux那些事,微信公眾號:嵌入式與Linux那些事】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
內存泄漏檢測工具Sanitizer介紹
RK3588+DeepSeek有沒有“搞頭”?

分析C語言代碼結構的設計問題
虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用
什么是泄漏電流試驗?

評論