关于提高程序效率的一些建议

关于提高程序效率的一些建议


(1) 尽量使用编译时求值的表达式(如常量表达式),而减少使用运行时求值的表达式(代价更高)。


(2) 在for循环里减少计数器的使用(可能的话),如下:
#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,这样只需在程序开始前初始化一次。


(6) 结构中成员之间的边界对齐问题:
结构的起始位置必须是结构中边界要求最严格的数据类型所要求的位置,如下:
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值