簡體   English   中英

是否有可能通過 valgrind 准確地找到一個進程消耗了多少堆棧內存?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM