`
刘小小尘
  • 浏览: 62523 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编程中需要注意的细节

 
阅读更多
虽然,这些使用方法看似差别不大,在现在的cpu运行期起来几乎上可以忽略不计,
但是,我们想一下现在软件,每一个都是那么的庞大,一个小项目都是几万行代码,
一个函数中你消耗一点,那么多函数是很大的性能消耗的。举一个不恰当的例子,
如果在百度首页中,每天几亿次的点击率,每一个函数里面都有一个无用++运算,这个i++可以小视吗?
下面的例子是我在虚拟机中运行,其中也会有机器性能不好的原因,但是我觉得这样才会将问题展示的更加的严重。

1.不要将函数作为循环的条件

SIZE= 1024
program 1: time:29ms

p = &a;
for( ; i < SIZE*sizeof(int); i++)
{
p = 1;
p++;
}
program 2: time:1ms
p = &a;
len = SIZE*sizeof(int);
for( ; i < len; i++)
{
p = 1;
p++;
}
原因:因为每次比较条件,函数都需要重新计算的,将会消耗时间。
2. 减少内存访问次数
program:1 time:1ms
i = 0;
for( ; i < 1024; i++)
tmp ++;

program:2 time:7ms
i = 0;
for( ; i < 1024; i++)
tmp = tmp + 1;
原因:内存与cpu的频率差别很大,尽量减少cpu对内存的访问,减少变量引用;
3.去除不必要的分支
program:1 time:3ms
i = 0;
for (tmp = 0; tmp < 100; tmp++)
{
max = min = a[0] ;
for( ; i < 100; i++)
{
if (max > a[i]) max = a[i];
if (min < a[i]) min = a[i];
}
}
program:2 time:2ms
i = 0;
for (tmp = 0; tmp < 100; tmp++)
{
max = min = a[0] ;
for( ; i < 100; i++)
{
if (max > a[i]) max = a[i];
else if (min < a[i]) min = a[i];
}
}
注意:这个平时写代码的时候注意方可,很多时候书上都是这样的写的,大家觉得没什么?不影响程序的运行结果。所以,没有注意。
4.间接寻址比基地址寻址慢,所以将结构体中常用的成员放前面,并且放在一起。(类、接口、文件同理)
program 1: time:11ms
i = 0;
for( ; i < 1000; i++)
{
t.t1 = 1;
t.t3 = 1;
}
program 1: time:7ms
i = 0;
for( ; i < 1000; i++)
{
t.t1 = 1;
t.t2 = 1;
}
原因:将数据放到同一内存页中,减少页面切换,增加缓存的命中率。

#define MAX 1024

方法一
使用时间:94s

for( k = 0 ; k <10000 ; k++ )
for( i = 0 ; i<MAX; i++ )
for( j = 0;j < MAX; j++ )
a[i][j] = 0;


方法二
使用时间:488s

for( k = 0 ; k < 10000; k++ )
for( i = 0 ; i<MAX; i++ )
for( j = 0;j < MAX; j++ )
a[j][i] = 0;

方法三
使用时间:74s

int *p;
for( k = 0 ; k < 10000; k++ )
{
p=&a[0][0];
for( i = 0 ; i<MAX; i++ )
{

for( j = 0;j < MAX; j++ )
*p++ = 0;
}
}


方法四
使用时间:69s

int *p;
for( k = 0 ; k < 10000; k++ )
{
for( i = 0 ; i<MAX; i++ )
{
p = &a[i];
for( j = 0;j < MAX; j++ )
*p++ = 0;
}
}

方法五
使用时间:509s

int *p;
for( k = 0 ; k < 10000; k++ )
{
for( i = 0 ; i<MAX; i++ )
{
p = &a[i][0];
for( j = 0;j < MAX; j++ )
*p++ = 0;
}
}


r-
方法六
使用时间:1s


for( k = 0 ; k < 10000; k++ )
{
memset( a , 0 , ( MAX * MAX * sizeof(int) ) );
}


分享到:
评论

相关推荐

    Java编程中须注意的细节.pdf

    Java开发中,有很多琐碎的细节容易被我们忽视,本书算是对《Java Pazzlers》(Java解惑)的提炼

    C++编程规范关于C++编程要注意的细节

    一个不错的关于C++的编程规范文档,希望对你的编程学习有帮助

    地应力编程细节

    地应力编程中需要注意的细节,初始地应力平衡的处理方法

    学好C++编程语言需要注意的七大细节:用C++开发亲子小游戏代码的步骤分析.docx

    学好C++编程语言需要注意的七大细节: 1. 掌握C语言的基础知识。C++是C语言的扩展,因此学好C++编程语言需要对C语言有扎实的基础知识。比如,要掌握数据类型、变量、表达式、循环、条件语句等基础知识。 2. 学会...

    java高效习惯,编程中需要注意的一些细节

    java 高效的一些习惯。平时工作需要注意的一些情况

    C++编程指导(编程要注意的细节)

    There are certain programming techniques to become a master of view

    C# 编程注意项

    C# 编程注意项,开发中的小细节

    编程修养(程序员需要注意的关于编程的注意事项)

    是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有...

    C/C++高质量编程指南

    C/C++的高质量编程指南&在编程中需要注意的细节问题

    oracle编程的性能注意点

    oracle编程的性能注意点,讲诉oracle在编程时的一些注意点,细节方面的问题。

    BlackBerry 触摸屏设备编程

    本文共计11页,部分内容如下:一 触摸屏幕设计需要注意的地方 开发用于带触摸屏的 BlackBerry® 设备的应用程序时,您应考虑这些设备的以下 UI 功能: • 触摸屏 • 屏幕方位的重要性 • 触摸屏键盘 • 加速度计...

    QT高级编程 中文版

    因此,即使是很有经验的qt程序开发人员,也可以从书中找出自己不曾注意到的技术点。书中的全部示例程序都已用qt 4.6或者qt 4.5在windows、mac os x和linux系统上进行了测试。 《qt高级编程》主要面向c++/qt程序开发...

    MFC VC ++编程规范详述

    此文档对VC++/C语言编程中的注意事项进行了详细的叙述,并对其中的细节进行了分类讲解。

    高质量C编程指南

    关于C编程的一些注意细节,提高你的代码处理能力

    C语言编程规范.pdf

    C语言编程规范.pdf ,涵盖了常用C语言规范,C语言变量命名,函数命名,缩进风格等在编写代码时要注意各方面细节

    Java编程中常见问题汇总

    每天在写Java程序, 其实里面有一些细节大家可能没怎么注意, 这不, 有人总结了一个我们编程中常见的问题. 虽然一般没有什么大问题, 但是最好别这样做.

    高质量C++ C编程指南

    高质量C++ C编程指南,介绍C++ C编程中的一些注意细节,本书作者从事C++开发工作。

    UNIX网络编程

    对于开发网游服务器的人开说,是本非常好的书,书中核心的学习部分还是SOCKET 套接口基本API相关的使用和注意细节,其他部分可以忽略。网络游戏服务端编程其实针对网络底层所需要的技术点并不多,因此此书只需要针对...

    58MM热敏打印机编程手册

    58MM热敏打印机编程手册 格式说明 本编程手册的命令说明包括以下部分: 1) 命令名称及功能概述。 这是命令描述的第一部分。...致相互影响,而此部分给出了这些细节。 6) 参考。给出了与此命令相关、相似的其他命令。

    高质量C++编程指南

    让程序看起来让人赏心悦目 编程需要注意的一些细节和一些对问题的处理方法

Global site tag (gtag.js) - Google Analytics