轉:C語言基本功教程系列(1)

來源:互聯網
上載者:User
看了那麼多文章,感覺到大家學習遊戲程式設計的熱情.經常看到很多人提出關於openGL directX,和computer graphics的問題. 但是我個人人為, 遊戲程式設計,最最最重要的還是C C++語言的基本功. 如何編寫高效率,整潔,和儘可能少的Bug的代碼,是成為一個遊戲程式設計員的關鍵. 所以我開拉這個小系列,來幫C或C++語言基礎不牢靠的人補補基礎知識,希望能夠對大家有所協助.

 

至於內容嘛,我想起來什麼就寫什麼,不一定有什麼邏輯關係.畢竟我工作也很忙,只有在每個milestone完了以後才有時間幹點別的. 所以這裡先道歉啦.

今天就講講最基本的迴圈.

int i;
for(i = 0; i < 100; i++)
{
    // do something
}

也許很多人覺得這個代碼是最簡潔的了.其實不然, 還有更快速的寫法.

i = 100;
do
{
// do something
}while(--j);

以下是visual studio .net 2003編譯過的彙編代碼.

================while loop================
    j = 10;
00411A32  mov         dword ptr [j],0Ah
    do
    {
        
    }while(--j);
00411A39  mov         eax,dword ptr [j]
00411A3C  sub         eax,1
00411A3F  mov         dword ptr [j],eax
00411A42  jne         main+29h (411A39h)

 

================for loop================

    for(i = 0; i < 10; i++)
00413656  mov         dword ptr [i],0
0041365D  jmp         main+58h (413668h)
0041365F  mov         eax,dword ptr [i]
00413662  add         eax,1
00413665  mov         dword ptr [i],eax
00413668  cmp         dword ptr [i],0Ah
0041366C  jge         main+60h (413670h)
    {

    }
0041366E  jmp         main+4Fh (41365Fh)

仔細分析就會發現while迴圈比for迴圈在每次的迴圈中都少一條彙編語句. 主要是因為while迴圈是從大到小的順序迴圈,不需要和10進行比較就可以跳轉.而且可以直接利用--j語句設定的符號標誌進行條件判斷.  

同樣是迴圈10次,但是少一條語句還很多關鍵的時候很有用哦.

以上是第一章,如果有不同意見,錯誤或者遺漏,請諒解哦.

這個,上邊是debug version的代碼。偷懶被人看出來,下面給出release版本經過編譯器最佳化的代碼,最佳化參數 /02 /0t:
============for loop=============
:00401029          xor eax, eax
:0040102b          jmp 00401030
......
:00401030          .......
:00401035          inc eax
:00401036          cmp eax, 000000064
:00401039          jl 00401030
===========while loop============
:00401029          mov eax, 000000064
:00401030          ..........
.....
:00401035          dec eax;
:00401036          jne 00401030

 

----------------------------------------------------

http://data.gameres.com/document.asp?TopicID=65354

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.