1、赋值语句把常量放在左边,防止在出现少写一个等于号的时候通过了编译器语法检查。
2、strcpy、sprintf、strcat存在安全隐患使用,它们都不会检查buffer overflow的问题,应该使用它们的安全版本,strncpy、snprintf、strncat。

C#

1、随机数,增加容器搜索命中率

public GameObject GetFreeObject()
{
    int i = Random.Range(0, pool.Count),
        endIndex = 0;
    for (; i < int.MaxValue; ++i)
    {
        if (i >= pool.Count) i = 0;
        PoolObject currObj = pool[i];
        if (currObj.isFree)
        {
            currObj.isFree = false;
            return currObj.Object;
        }

        endIndex++;
        if (endIndex == pool.Count)
            break;
    }
    return null;
}

C++

1、位于判断奇偶

bool isOdd(int a)
{
    return a & 1 ? true : false;
}

2、交换

void swap(int a, int b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

3、浮点数转整数

int float2int32(const float value)
{
    #if !defined(X64) && COMPILER == COMPILER_MICROSOFT && !defined(USING_BIG_ENDIAN)
        int i;
        __asm {
            fld value
            frndint
            fistp i
        }
        return i;
    #else
        union { int asInt[2]; double asDouble; } n;
        n.asDouble = value + 6755399441055744.0;

    #if USING_BIG_ENDIAN
        return n.asInt [1];
    #else
        return n.asInt [0];
    #endif
    #endif
}

int double2int32(const double value)
{
    #if !defined(X64) && COMPILER == COMPILER_MICROSOFT && !defined(USING_BIG_ENDIAN)
        int i;
        __asm {
            fld value
            frndint
            fistp i
        }
        return i;
    #else
      union { int asInt[2]; double asDouble; } n;
      n.asDouble = value + 6755399441055744.0;

    #if USING_BIG_ENDIAN
      return n.asInt [1];
    #else
      return n.asInt [0];
    #endif
    #endif
}

4、快速开方(Quake-III Arena)

/*
** float q_rsqrt( float number )
*/
float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                        // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );               // what the fuck?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
    //    y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

    #ifndef Q3_VM
    #ifdef __linux__
        assert( !isnan(y) ); // bk010122 - FPE?
    #endif
    #endif
    return y;
}

5、alloca函数的使用
http://blog.codingnow.com/2008/08/_alloca.html

游戏编程技巧

* 不要怕使用全局变量,许多游戏不允许在对时间要求很严格的函数中使用参数,而是使用一些全局变量来传递参数。由于参数是要被压栈和出栈,执行这个函数体所需的时间小于调用函数所需时间。
* 使用内联函数,提高运行速度。
* 尽量使用32位变量而不用8位变量或16变量。(这种扩充会浪费相当多的内存,但是较之速度的提高往往是值得的)
* 以类似RISC的方式来编程,尽量简化代码,处理器喜欢简单指令,可以使用更多的执行单元并行处理更多的代码。另外也方便设置断点。
* 灵活使用位运算。
* 高效率的算法能很明显地提升运行速度。
* 不要为简单的对象定义太多复杂的数据结构。游戏编程中90%的部分都是数据操作,所以数据应该尽可能简单。
* 类和继承的使用要谨慎。
* 除非是简单类型的参数,否则尽可能不适用值传递的方式传递参数。应该使用指针。
* 尽可能使用整数,尽管浮点处理器几乎和整数处理一样快,但整数更精确。
* 避免使用平方根、三角函数或任何复杂的数学函数。
* 如果算法中应用到矩阵操作,要重复利用矩阵的稀疏性——部分元素为零。