zoukankan      html  css  js  c++  java
  • 转:C语言基本功教程系列(1)

    看了那么多文章,感觉到大家学习游戏程序设计的热情.经常看到很多人提出关于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

  • 相关阅读:
    Nginx
    Nginx & AWStats 安装、配置、使用
    Nginx
    linux
    工作中的 Vim 和 git
    后端
    django
    django
    awk流程控制
    linux系统内置函数
  • 原文地址:https://www.cnblogs.com/mumble/p/1837994.html
Copyright © 2011-2022 走看看