隨筆三十五 迴圈

2021-06-07 19:14:11 字數 1654 閱讀 8502

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...