我正在創建一個c程序,我打算在短時間內在ARM處理器上運行。我想用我的全局變量來衡量我使用的內存量,同時忽略堆棧/堆的大小。有沒有辦法讓gcc在編譯時將其轉儲出來,或者從編譯後的二進制文件中檢索這些信息?如何測量我的全局變量的總大小?
11
A
回答
10
一個很好的方法來查看你的內存在哪裏去看鏈接器映射。鏈接器映射是由鏈接器生成並詳述程序的所有內存位置的文件。您可以在全局變量以及代碼的符號基礎上查看內存分配情況。過去,我使用鏈接器映射來處理對內存要求嚴格的項目。它們可以很容易地識別問題,如佔用大量空間的全局內存緩衝區。
添加此選項將gcc命令行來生成鏈接器映射:
-Wl,-Map = output.map
2
7
GNU binutils套件包含一個名爲「size」的程序,它是獲取所需數據的最簡單方法 - 或者至少是一個合理的近似值。對於典型的程序(在這種情況下,一個不小的內嵌一個),輸出可能類似於:
text data bss dec hex filename
332268 2200 19376 353844 56634 test-directory/add
前三列是二進制的部分的大小:「文本」是可執行代碼, 「數據」是常量等等 - 包括用初始化變量表示初始變量的變量 - 而「bss」是隱含靜態初始化的所有變量的初始值。在一個典型的嵌入式程序中,這些靜態初始化程序幾乎專門用於全局變量(並且,出於您的目的,您可能希望在測量中包含其他靜態變量,因爲它們也不在堆棧或堆中)。
因此,我認爲你最終得到的「數據」和「bss」的總和實際上就是你想要的。 (在閱讀hlovdal鏈接的文章後,我比我更不確定;也許評論者可以添加確認?)
(之後,「dec」和「hex」是所有以十進制表示的總大小和「filename」當然是顯而易見的。)
相關問題
- 1. Ember全局變量的輸入大小
- 2. Oracle包中的全局變量大小
- 3. lotusscript中的全局變量如何全局變量IBM Notes 9
- 4. 全局變量如何影響可執行文件的大小?
- 5. 如何在VB6中設置全局變量的數組大小
- 6. 爲什麼我的全局變量不是全局變量?
- 7. 如何用Mocha測試全局變量?
- 8. 大會,全局變量
- 9. 局部變量的全局變量
- 10. 如何將我的本地變量用作全局變量?
- 11. 如何計算全局範圍內全局變量的數量?
- 12. 我的腳本中的全局變量和局部變量
- 13. JavaScript;我如何聲明變量全局?
- 14. 如何使局部變量的一類爲全局變量
- 15. 變量全局變量?
- 16. 爲什麼局部變量會殺死我的全局變量?
- 17. 測試$?在Ruby rspec的全局變量
- 18. (Wordpress)檢測分頁的全局變量?
- 19. 全局變量讓我空
- 20. 變量變量和超大全局變量
- 21. 全局變量
- 22. 全局變量。
- 23. 全局變量
- 24. 全局變量
- 25. 全局變量
- 26. 全局變量
- 27. 全局變量
- 28. 全局變量
- 29. 全局變量
- 30. 全局變量