函数调用的时候,参数传引用。尽量减少传递参数。
缓存buffer,把经常使用的数据缓存下来,避免重复计算。用空间换时间。
预计算,有时候计算方便,可以把后面的数据的数据一并计算,然后暂时存起。下个循环不用使用预计算的数据。
使用简单数据,能用string就不用vector of char. 能用char*就不用string。
数据大小固定,对齐。动态分配内存不如静态分配内存。
SIMD指令优化,一次处理多个数据。注意对齐问题。
缓存cache的命中率的问题,数据连续性,指令连续性。一个for循环调用两个大函数,函数之间访问的数据不一样。缓存的数据不连续,需要换页访问。造成性能降低。而分成两个循环虽然多了些循环的指令,但是数据是连续的,性能会更好。
根据数据出现概率频率,可以优化条件分支。
循环中,访问量多的变量可以使用寄存器。此外,在栈上的指令,数据会在cache中。比访问堆上的内存要快上不少。
顺序访问,用指针比数组索引要快。
如果数据是共享的,尽量使用单线程模型,多线程有一定开销。
线程的数据尽量独立,减少或避免同步的操作。