浮点操作 通常非常昂贵,因为它们可能需要大型库函数。考虑用整数操作(它们更高效)替换它们。 内存放置和指针类型 如果你追求下列情况,那么8和16位架构变得更加高效且产生的代码更少: 小内存区域, 小地址和小指针。避免使用最大内存类型或指针。 类型转换 应当避免指针转来换去, 以及在表达式中混合类型。 这会产生无效代码并存在信息丢失的风险。 结构填充 发生在当CPU要求对齐的时候。为避免这种内存浪费, 按大小将字段排序以确保填充所使用的内存的量减到最小。 便于寄存器分配 函数参数和局部变量 (与全局变量相反) 减少内存消耗, 因为它们可以放进寄存器,只需要在作用域内时存在。 使用全局变量会引入开销, 因为任何时候调用访问它们的函数时,它们都必须更新。 可变参数 (printf-风格) 应该避免, 因为它们迫使参数进堆栈。要不然这些参数会用寄存器传送。 便于编译器变换 函数原型 应该使用, 由于不需要类型提升 (隐式类型转换) , 所以这样更容易在源代码中发现问题。原型还会让编译器更容易生成高效的代码。 静态声明的变量和函数 只应该用于声明它们的文件或模块中,以获得最优化的代码。 内联汇编 可能会是编译器优化代码的最主要的障碍。一定要检验在你使用的编译器中asm关键字是如何工作的。 ”聪明的”源代码 应该换成清晰的代码, 因为清晰的代码更容易维护, 更少可能包含程序设计错误, 而且通常更易于编译器进行优化。
|