2012-05-18 44 views

回答

0

首先問

它已經有一段時間,因爲我已經在Valgrind的工具工作(甚至更長的時間比這個問題是舊的),但如果有些人還是有興趣的,這裏就是我挖出了來自內存:

首先,區別:超級塊與基本塊有點不同。 Valgrind使用超級塊,而不是基本塊。一個超級塊可能會在任何時候退出,但是一個基本塊只會通過結束而退出。

Valgrind不會將程序分成200個超級塊。我非常肯定,它將程序分解成不超過200個IRStatement的超級塊(可能會或可能不會直接轉化爲指令)。

我相當確定的原因是爲了翻譯者的效率:至少在當前版本的Valgrind中,我相當確定它不會預先翻譯整個程序。將程序翻譯成IR格式非常耗時且耗費大量資源,因此翻譯人員只會根據需要翻譯儘可能多的程序。它通過僅在第一次執行代碼時才轉換代碼。

第二個問題

現在,作爲你的第二個問題...我不完全知道你是問什麼。如果您問「Valgrind如何決定如何分割該程序?」,那麼答案就是它與編譯器類似。它開始將程序轉換爲超級塊,並在其達到塊限制大小或檢測到從其他位置存在入口點(超級塊和基本塊只能有一個入口點)時啓動新的超級塊。

如果您的意思是「我可以更改IRSB超級塊的大小嗎?」,那麼是的,您可以選擇在工具初始化代碼中傳遞給Valgrind以告訴它您要的超級塊的大小(雖然我不記得你是否可以將它增加到任意大小)。這些都沒有記錄在網上,只有稀少的文件記錄在文件本身。您可以查看其他工具的源代碼,以瞭解它們在初始化過程中如何將配置選項傳遞給Valgrind。那至少應該給你一個好主意,看看哪些頭文件可以找出你需要傳遞給Valgrind的選項。

+0

謝謝你的回答。當我問這個問題時,我對valgrind沒有任何瞭解。現在,我已經知道了,並發現我的問題很蠢,再次感謝! – Syrena

相關問題