关于提高程序效率的一些建议
2017-08-06 13:37
204 查看
关于提高程序效率的一些建议
(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)
(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)
相关文章推荐
- 如何提高android程序运行效率,程序员在开发过程中应当注意的一些事项
- 改善C++ 程序的150个建议学习之建议35:使用内存池技术提高内存申请效率与性能
- 一些提高Web应用执行效率的建议
- 为提高问题的解答率和发问的质量--关于在本群本本论坛问问题的一些技巧的建议
- Excel VBA程序设计中提高效率的一些建议
- 提高PHP程序效率的一些技巧
- java中使用多线程不能明显提高程序效率的一些原因
- Excel VBA程序设计中提高效率的一些建议
- 程序员提高效率的一些建议
- 提高效率 十条关于Gmail附件的超级建议
- 为提高问题的解答率和发问的质量--关于在本群本本论坛问问题的一些技巧的建议
- 程序员提高效率的一些建议
- 关于提高.net应用程序效率的一些经验总结(转)
- 提高JQ效率的一些建议
- 关于程序的一些看法和简单建议 (转)
- “提高一下dotnet程序的效率一”中关于exception的问题
- php 关于程序提高执行效率的方面
- 关于效率、程序与生活的一些思考
- 关于使用SQL自动生成,程序转化工具,提高开发数据库的效率
- 整理关于java开发工具使用过程中一些小技巧来提高开发效率