1、do-while 迴圈
do-while 語句的通用形式如下:
do
body-statement
while(test-expr);
do-while 的通用形式可以翻譯成如下所示的條件和 goto 語句:
loop:
body-statement
t = test-expr;
if (t)
goto loop;
理解產生的彙編**與原始**之間的關係,關鍵是找到程式值和暫存器之間的對映關係。
2、while 迴圈
while 語句的通用形式如下:
while (test-expr)
body-statement
將 while 迴圈翻譯成機器**有很多種方法。一種常見的方法,也是 gcc 採用的方法是使用條件分支,在需要時省略迴圈體的第一次執行,從而將**轉換成do-while迴圈,如下:
if (!test-expr)
goto done;
do body-statement
while (test-expr)
done:
接下來,這個**可以直接翻譯成 goto **,如下:
t = test-expr;
if (!t)
goto done;
loop:
body-sttement
t = test-expr;
if (t)
goto loop;
done:
使用這種實現策略,編譯器常常會優化最開始的測試,比如說認為總是滿足測試條件。
3、for 迴圈
for 迴圈的通用形式如下:
for (init-expr; test-expr; update-expr)
body-statement
c 語言標準說明(注意:當迴圈體中有continue時,不可直接轉換),這樣的乙個迴圈的行為與下面這段使用 while 迴圈**的行為一樣:
init-expr;
while (test-expr)
這段**編譯後的形式,基於前面講過的從 while 到 do-while 的轉換,首先給出 do-while 形式:
init-expr;
if (!test-expr)
goto done;
dowhile (test-expr);
done:
然後,將踏轉換成 goto **:
init-expr;
t = test-expr;
if (!t)
goto done;
loop:
body-statement
update-expr;
t = test-expr;
if (t)
goto loop:
done:
出差(三十五)
今天早晨到會議室後便買好了明天回公司的車票,長達乙個多月的出差生活即將告一段落,利用假期回去休息幾天,換換心情。經過這乙個多月的封閉式開發,對專案,對團隊有了進一步了解,感受到了創業公司的不易,也再次體驗了三點一線的生活方式,已經遠超996的工作模式,即使這樣依舊離目標有很大距離,主要原因還是缺少乙...
CUDA學習(三十五)
建議和最佳做法 整體效能優化策略 效能優化圍繞三個基本策略展開 最大限度地平行執行 優化記憶體使用量以實現最大記憶體頻寬 優化指令使用率以實現最大指令吞吐量 最大化並行執行從構建演算法開始,盡可能多地暴露資料並行。一旦演算法的並行性暴露出來,它就需要盡可能有效地對映到硬體。這是通過仔細選擇每個核心啟...
GNU make manual 翻譯 三十五
繼續翻譯 in a line of a makefile starts a comment it and the rest of the line are ignored,except that a trailing backslash not escaped by another backslas...