关于提高程序效率的一些建议
(1) 尽量使用编译时求值的表达式(如常量表达式),而减少使用运行时求值的表达式(代价更高)。
#define SIZE 50
int x[SIZE];
int y[SIZE];
void try()
{
register int *p1, *p2;
for( p1 = x, p2 = y; p1 < &x[SIZE]; )
*p1++ = *p2++;
}
(3) 数组操作时:使用指针往往比使用下标更有效率(但不一定);指针的效率永远不会低于下标(理论上)。
(4) 声明为寄存器变量的指针通常比位于静态内存和堆栈中的指针效率更高。
(5) 自动变量(尤其是数组)如果在函数或代码块中经常要被初始化,可以考虑将其设为static,这样只需在程序开始前初始化一次。
结构的起始位置必须是结构中边界要求最严格的数据类型所要求的位置,如下:
struct ALIGN { char a; int b; char c; };
sizeof(ALIGN) 则显示要占12字节。因为int型的存储位置必须能被4整除,结构起始位置则也一样。所以3个成员将各占4个字节。
如果改为这样:
struct ALIGN { int b; char a; char c; };
则只占8字节(其中2个字符紧挨在一起)。
(必要时需对结构中成员的排序进行优化。)
单个字节(char)能对齐到任意地址
2字节(short)以2字节边界对齐
4字节(int, long)以4字节边界对齐
sizeof 得到结构的整体长度,包括因边界对齐而跳过的字节。
宏offset(定义在stddef.h中)确定结构中某个成员的实际位置。
如:offsetof(struct ALIGN, b)