[英]Is it possible to exactly find how much stack memory is consumed by a process by valgrind?
我有一個用 C 語言編寫的項目。 我想找到進程消耗的堆棧內存(以局部變量等形式)(如果可能的話實時或至少最大值)。
使用 massif,我能夠找到確切的堆消耗量。 但我無法找到確切的堆棧用法。 我嘗試使用 --stacks=yes 啟用(使用 -g 標志編譯)。 但是當我使用 ms_print 打印時,堆棧列顯示隨機值。
例如: void main() { int a =10; }
void main() { int a =10; }
我需要的堆棧值應該小於 10。(考慮函數返回地址)
我找到了合理的解決方案。
編譯時使用 -fstack-usage 標志。 例如:gcc -g -fstack-usage 文件名.c
在 makefile 的 CFLAGS 中使用相同的內容。 無需運行可執行文件。 編譯后,擴展名為 .su 的相同文件名將出現在該文件夾中。 可以使用cat/vim/notepad等打開。
它將顯示“API 名稱 -- stack_memory_size”。 需要俱樂部 all.su 文件並使用腳本提取數字。
對於堆內存計算,只需使用valgrind。
PS:在挖掘更多內容時,我發現了以下答案。 如何使用 gcc 確定嵌入式系統中的最大堆棧使用量?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.