我用opencv編寫我的項目c。 我想打印有關分配的內存或我的程序使用的內存的信息。 有沒有一個函數,給我關於內存的信息? 最後,我使用Qt for Linux和Windows,我如何獲得我的程序分配的內存大小?
在此先感謝。
我用opencv編寫我的項目c。 我想打印有關分配的內存或我的程序使用的內存的信息。 有沒有一個函數,給我關於內存的信息? 最後,我使用Qt for Linux和Windows,我如何獲得我的程序分配的內存大小?
在此先感謝。
您可以編寫包裝到malloc
和free
,以跟蹤您使用的內存量。
編輯:如果您還想攔截對外部庫中的malloc和free的調用,則必須在共享庫中定義它們並在libc之前加載它。你如何做到這一點取決於你的操作系統。
如果你加載了一個庫,並且使用瞭解包的'malloc',那麼你的程序使用的內存是不是? –
你可以給我關於malloc的例子作爲包裝和免費。 – Aym
@RemusRusanu確實有可能。可以直接調用OS內存預留功能。像'sbrk'(雖然沒有推薦,因爲它干擾了一些malloc實現)。現代malloc使用的'memmap',並給出了隔離的mem塊。 Win32上的'VirtualAlloc',同樣的概念。或者是「NTHeap」的東西。 –
在Linux上,你看看your own process info pseudo-file:
/proc/[pid]/statm
Provides information about memory usage, measured in pages. The columns are:
size total program size
(same as VmSize in /proc/[pid]/status)
resident resident set size
(same as VmRSS in /proc/[pid]/status)
share shared pages (from shared mappings)
text text (code)
lib library (unused in Linux 2.6)
data data + stack
dt dirty pages (unused in Linux 2.6)
在Windows上,你看看你自己的進程Process Object性能計數器:
Private Bytes
顯示的當前字節數,這一進程已分配不了的與其他進程共享。
如果您檢查精靈,轉儲或映射文件,您也可以在構建時間內對代碼/數據段進行一定程度的內存分析。 堆棧使用的GCC命令行選項爲:-fstack-usage和-fcallgraph-info。
-1我很確定OP是要求在運行時分配的內存。 – quantum
此之前的線程有一些想法http://stackoverflow.com/questions/6192531/best-strategy-for-profiling-memory-usage-of-my-code-open-source-and-3rd-party – Ari