2014-10-17 38 views
0

如何從Linux系統上的C++代碼中獲取總內存,已用內存,可用內存?如何獲取Linux系統上的內存信息?

+1

讀取/ proc中的僞文件。他們有一個聯機幫助。 – 2014-10-17 18:15:44

+1

可能的重複,取決於您希望系統級還是特定於進程的信息:[如何在運行時使用C++獲取內存使用量](http://stackoverflow.com/q/669438/464709) – 2014-10-17 18:19:39

回答

0

通過valgrind運行您的程序。對於一個名爲foo程序,例如:

valgrind foo 

則會在跟蹤內存使用的線束運行程序,並打印出信息的程序結束之後。

如果您沒有安裝valgrind由於某種原因,您應該能夠在您的發行版的軟件包存儲庫中找到它。

0

正如Chris Stratton所述,您可以在Linux上查詢很多系統信息,如/proc/,所以請閱讀proc(5);其中包含文本僞文件(有點像管道)以便順序讀取。這些不是真正的磁盤文件,因此讀取速度非常快。您需要在每次測量時打開並關閉它們。

從一個過程中,您可以使用/proc/self/maps/proc/self/smaps查詢其的virtual memory;在該過程之外,對於另一個pid 1234的過程,使用/proc/1234/maps & /proc/1234/smaps;你可以得到系統範圍內的內存信息直通/proc/meminfo

因此,嘗試在終端以下命令:

cat /proc/meminfo 
cat /proc/$$/maps 
cat /proc/$$/smaps 
cat /proc/self/maps 

瞭解更多的什麼,他們可以給你。

要知道,(使用newdeletemallocfree使用像mmap(2)系統調用往往要求空間(從內核),但先前管理-d free內存重用,所以往往不釋放內存回到內核​​munmap。在C memory management上閱讀wikipage。換句話說,使用的堆在進程外不可訪問(因爲某些未使用,但對未來可重複使用malloc-s,內存仍爲mmap -ed)。另見mallinfo(3)malloc_stats(3)。使用valgrind來檢測內存泄漏。

Advanced Linux Programming是一本很好的書。它有幾個相關的章節。