在LLVM過程中,我想記錄一個循環的循環計數。我做的一部分是在每個循環的標題塊的終止符之前插入一個函數調用。我發現這個方法工作不好,因爲如果一個循環有n次迭代,頭塊將被執行n + 1次。這個事實適用於「for」和「while」循環,但它不適用於「do while」循環。我將函數調用插入到「for」和「while」循環的第二個塊中,並插入到「do while」循環的第一個塊中。這隻有在我事先知道目標循環的類型時才起作用,這是純粹的比特碼所不可能的。我的問題是:是否有一種通用的方式(處理各種循環)來插入一個函數調用,該函數調用的次數與迭代次數完全相同。循環頭部的執行頻率
回答
將函數調用放在循環主體的開始處。你爲什麼試圖把它放在標題中?
for (...) {
increment_trip_count();
...
}
如果插入的循環體開頭的函數調用,你會得到正確的計數。
問題是如何知道循環體的起始塊。 – dalibocai 2011-04-23 01:41:15
循環體是通常放置在大括號內的部分。如果你打電話給你的功能,它會告訴你身體被執行了多少次,這就是你要求的,不是嗎? – Lindydancer 2011-04-23 06:40:53
在源代碼級別,它當然是正確的。但是,我的問題是針對llvm的。在llvm中的循環結構有一個基本塊列表。但是,第一個塊將執行n + 1次,其中n是循環的循環跳閘次數。這適用於「for」和「while」循環,但對於「do while」循環來說並不正確,其中第一個塊將被執行n次。 – dalibocai 2011-04-25 01:29:09
- 1. 執行外部PHP文件循環
- 2. TSQL嵌套循環只執行內部循環
- 3. 高頻率循環中的Python file.close()和()行爲
- 4. C#執行循環
- 5. jQuery執行循環
- 6. For循環內循環未執行
- 7. 平均循環,for循環未執行
- 8. 在循環中執行模態循環
- 9. 執行if語句的頻率如何?
- 10. GC執行的頻率如何?
- 11. fork()的執行for循環
- 12. JavaScript的for循環執行
- 13. PHP退出內部foreach循環並繼續執行外部循環
- 14. 循環的AsyncTask Android是執行環路
- 15. 爲什麼我的循環執行得太頻繁?
- 16. For循環未執行
- 17. For循環未執行
- 18. 連續循環執行runnable
- 19. 問題與執行循環
- 20. 不執行while循環
- 21. 循環執行動畫
- 22. Javascript ajax循環執行
- 23. while循環沒有執行
- 24. 執行While循環腓
- 25. For循環執行遞歸
- 26. 循環執行多次
- 27. 嵌套循環不執行
- 28. 執行多重循環
- 29. For循環未執行
- 30. 程序不執行循環
如何知道哪個基本塊是循環體的起始塊?我測試並發現,在很多情況下,循環頭部塊與循環中包含的第一個基本塊相同。 – dalibocai 2011-04-23 01:40:17