是否有可能編寫一個程序,該程序在執行時採用用戶輸入,標記爲n,然後執行源代碼定義的一組指令n次,一次迭代直接在另一個之後,而不必增加計數器變量,並在每次迭代後將其與用戶輸入進行比較?換句話說,你可以告訴CPU「這樣做n次」,而不需要CPU啓動一個自我更新的計數器,並且在每次迭代之後都會對n進行檢查嗎?迭代用戶輸入的次數沒有比較?
0
A
回答
0
的種類。你可以做的是採取指令列表執行,重複它們n(確保修正任何絕對跳轉),添加function prologue and epilogue,將結果保存到area of memory that is allowed to execute code並將該區域的起點作爲函數調用。
請注意,進行這種代碼生成對於像C這樣的語言來說確實很難正確執行。您可能必須降低代碼,並在代碼中編寫代碼(或者至少部分代碼),或者更高版本並使用像C#這樣的語言,允許您操作一些代碼表示,然後將其編譯爲機器代碼。
此外,這不太可能導致顯着的性能收益。實際上,它可能會降低性能,因爲您的代碼可能不再適合CPU的指令緩存。
編譯器有時會自動部分執行此優化。這叫做loop unrolling。
相關問題
- 1. Pi迭代,顯示用戶輸入的pi的迭代次數
- 2. 輸入迭代器的等效比較
- 3. 比較用戶輸入的值與列表中的迭代值
- 4. 比較用戶輸入
- 5. Python輸入沒有正確比較
- 6. 比較用戶輸入的字符C
- 7. Concepts-Lite迭代器比較比較
- 8. raw_input的迭代比較
- 9. 每次迭代顯示excel vba輸入框中的迭代次數
- 10. 比較ArrayList和用戶輸入
- 11. 比較日期用戶輸入
- 12. 比較用戶輸入與Java
- 13. PHP比較CSV和用戶輸入
- 14. 比較用戶輸入列表python3
- 15. C++ - 讀取和比較用戶輸入?
- 16. 比較用戶輸入與字符串
- 17. 獲得比較!和用戶輸入
- 18. 多次輸入的連續迭代
- 19. 模板比較迭代器
- 20. 比較迭代法,並在
- 21. 比較兩端()迭代器
- 22. 比較迭代器,C++
- 23. boost-mpl比較迭代器
- 24. 向量迭代器比較
- 25. 用戶輸入後迭代for循環
- 26. 比較手動輸入的字符串與用戶輸入
- 27. java循環沒有打印輸入流數據第一次迭代後
- 28. UITextField輸入每次新迭代
- 29. 如何比較向用戶輸入要求用戶輸入的變量?
- 30. 輸入時間並將其與用戶輸入進行比較
是關於CPU指令級別(無論硬件)還是任何編程語言(不管高級別)的問題? – kostix
我的意思是,如果你的意思是後者,答案本身可能是模糊的,因爲足夠高級的語言只會隱藏一些循環結構背後的事實。例如,你可以在樸素的Bourne shell中做到這一點:'read n;因爲我在\'seq 1 $ n \';做echo $ i;完成「 - 正如你所看到的,沒有計數器,只是循環,而且你仍然按照輸入的」n「次迭代。 – kostix
如果您想知道任何現有的H/W arch是否有一些隱含地循環訪問代碼的CPU命令,則問題會變得更加有趣。關於我的頭頂,我記得x86的'LOOPNE' /'LOOPNZ',但是它們會在專用寄存器中減少值,該寄存器最初包含迭代次數。如果對你沒有問題 - 遞減的屬性*已經完成,那麼這就是答案;-)否則請縮小你的問題範圍。 – kostix