爲什麼Valgrind將所有程序劃分爲200個基本塊?以及如何劃分?爲什麼Valgrind將所有程序分成200個基本塊?
3
A
回答
0
首先問
它已經有一段時間,因爲我已經在Valgrind的工具工作(甚至更長的時間比這個問題是舊的),但如果有些人還是有興趣的,這裏就是我挖出了來自內存:
首先,區別:超級塊與基本塊有點不同。 Valgrind使用超級塊,而不是基本塊。一個超級塊可能會在任何時候退出,但是一個基本塊只會通過結束而退出。
Valgrind不會將程序分成200個超級塊。我非常肯定,它將程序分解成不超過200個IRStatement的超級塊(可能會或可能不會直接轉化爲指令)。
我相當確定的原因是爲了翻譯者的效率:至少在當前版本的Valgrind中,我相當確定它不會預先翻譯整個程序。將程序翻譯成IR格式非常耗時且耗費大量資源,因此翻譯人員只會根據需要翻譯儘可能多的程序。它通過僅在第一次執行代碼時才轉換代碼。
第二個問題
現在,作爲你的第二個問題...我不完全知道你是問什麼。如果您問「Valgrind如何決定如何分割該程序?」,那麼答案就是它與編譯器類似。它開始將程序轉換爲超級塊,並在其達到塊限制大小或檢測到從其他位置存在入口點(超級塊和基本塊只能有一個入口點)時啓動新的超級塊。
如果您的意思是「我可以更改IRSB超級塊的大小嗎?」,那麼是的,您可以選擇在工具初始化代碼中傳遞給Valgrind以告訴它您要的超級塊的大小(雖然我不記得你是否可以將它增加到任意大小)。這些都沒有記錄在網上,只有稀少的文件記錄在文件本身。您可以查看其他工具的源代碼,以瞭解它們在初始化過程中如何將配置選項傳遞給Valgrind。那至少應該給你一個好主意,看看哪些頭文件可以找出你需要傳遞給Valgrind的選項。
相關問題
- 1. valgrind爲什麼說基本的SDL程序正在泄漏內存?
- 2. 什麼構成基本塊的開始?
- 3. 爲什麼Valgrind在INSIDE有效塊中報告讀/寫錯誤?
- 4. 爲什麼引導程序將視口分成12列
- 5. 爲什麼不是這個基本的Java程序工作?
- 6. 爲什麼這個基本的python程序不工作?
- 7. PThread基本程序,好奇這個代碼有什麼問題
- 8. 爲什麼這個ruby字符串將to_i轉換爲200?
- 9. 爲什麼Yii2模塊單獨配置不適用於基本應用程序?
- 10. bash flock:爲什麼200?
- 11. 這個程序爲什麼用'a'代替所有字符
- 12. 爲什麼hadoop容量調度程序使用容量的200%
- 13. 這個程序爲什麼有效?
- 14. 爲什麼CLR集成程序集有一個隨機版本號
- 15. 成爲Android應用程序開發人員需要什麼基本的東西?
- 16. 內存分配:爲什麼這個C程序有效?
- 17. 爲什麼NASM程序分爲3個部分?
- 18. 爲什麼將我的模塊分成多個文件會讓它變慢?
- 19. Valgrind在OS X上顯示超過200個分配給hello world程序的分配?
- 20. 爲什麼我的updatepanel會生成數百個腳本塊?
- 21. 爲什麼Python3.5有基於生成器的協程?
- 22. 如何將大文本分成多個塊,所有塊都具有相同的最大高度?
- 23. 爲什麼catch程序塊爲單個異常執行兩次?
- 24. Valgrind的使我的所有程序的線程睡眠
- 25. 爲什麼我需要每個文件上的所有模塊?
- 26. 爲什麼此表將所有條目排序爲字符串?
- 27. C,openMPI:什麼是將數據塊從每個進程分發到所有其他進程的最佳方式?
- 28. OpenGL:爲什麼選擇三角形作爲基本構建塊?
- 29. 爲什麼當我只有〜200時,XCode 4編譯〜3000個XIB?
- 30. 爲什麼hadoop不會將文件分發給所有節點?
謝謝你的回答。當我問這個問題時,我對valgrind沒有任何瞭解。現在,我已經知道了,並發現我的問題很蠢,再次感謝! – Syrena