我有一個程序,它有大量的靜態定義的變量。如果我在GDB啓動它,在主一個破發點,然後運行PMAP,我看到有大約100MB的數據已經分配:GDB - 我可以在內存中找到大數據元素
08838000 107576K rw--- [ anon ]
我已經發現的功能,一堆有巨大靜態定義的數組(例如200,000整數),並在我找到它們的時候擺脫它們。
有什麼方法可以找出堆/數據段上最大的項目是什麼?無論是在GDB還是通過其他方式?
我有一個程序,它有大量的靜態定義的變量。如果我在GDB啓動它,在主一個破發點,然後運行PMAP,我看到有大約100MB的數據已經分配:GDB - 我可以在內存中找到大數據元素
08838000 107576K rw--- [ anon ]
我已經發現的功能,一堆有巨大靜態定義的數組(例如200,000整數),並在我找到它們的時候擺脫它們。
有什麼方法可以找出堆/數據段上最大的項目是什麼?無論是在GDB還是通過其他方式?
的信息可以通過使用對象代碼檢查公用事業等納米(1)中找到:
nm --size-sort <object-file.o>
此外,objdump的可以給完全鏈接的程序額外的見解,給予足夠的調試信息。
這些實用程序通常是針對特定平臺的,因此在交叉編譯時必須注意使用正確的程序(即類似x86_64-linux-gnu-gcc-nm
而不是僅僅是nm
)。
您可以通過objdump和nm輸出獲取符號(對象)大小。我想,需要調試信息。 – fork0 2012-07-23 13:42:37
太棒了!花式寫它作爲答案:) nm --size-sort完全符合我的要求(並且在一些測試代碼中找到了一個20MB的2,500,000個整數,這在大多數系統中都不會使用!) – asc99c 2012-07-23 14:07:37
這聽起來像一個一小部分代碼因爲缺乏關注:) – fork0 2012-07-23 14:28:04