`
刘小小尘
  • 浏览: 67520 次
  • 性别: 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编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是...

    单片机嵌入式编程应注意的问题

    编程过程中,需要注意的关键点包括中断管理、内存管理、延时处理、宏定义、浮点运算、watchdog定时器等技术细节。 首先是中断管理问题。在嵌入式系统中,中断分为外部中断和内部中断。外部中断主要由外部事件触发,...

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

    本篇文章将深入探讨一些在C++编程过程中需要注意的关键细节。 1. **类型转换**:C++中的类型转换需要特别注意,如`static_cast`, `dynamic_cast`, `reinterpret_cast` 和 `const_cast`。理解它们的区别和适用场景,...

    单片机嵌入式编程注意事项

    开发者需要对硬件、操作系统、编程语言及其周边工具都有深刻的理解,并在编写程序时注重细节,这样才能编写出高效、稳定、可维护的代码。虽然这一过程可能枯燥乏味,但当程序成功运行并达到预期目标时,之前的付出就...

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

    ### 学好C++编程语言需要注意的七大细节 C++作为一种功能强大且应用广泛的编程语言,在软件开发、游戏开发、操作系统构建等多个领域扮演着至关重要的角色。为了更好地掌握C++,以下七个方面是学习者不可忽视的重点...

    路径分隔符在编程中的注意事项

    例如,当我们要表示一个Windows路径时,如`D:\test\test.txt`,在代码中需要写作`"D:\\test\\test.txt"`。 - 使用`CString`类型时,可以使用宏`_T`来指定字符串的类型,如`CString filename = _T("D:\\test\\test....

    C#中文编程示范编译器

    描述中提到的链接指向了一篇2009年的博客文章,虽然具体的细节无法在此提供,但可以推测文章可能介绍了该项目的详细信息,包括如何使用、实现原理以及可能遇到的问题和解决方案。博客作者"ruixing123"可能是一位C#...

    单片机C语言编程应注意的若干问题

    然而,由于单片机系统的特殊性,标准C语言并不能完全满足其需求,因此在使用C语言进行单片机编程时需要注意以下几个关键点。 #### 单片机C语言的主要特点 1. **简化硬件操作**:C语言允许开发者更多关注程序的功能...

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

    【编程修养】是每个程序员在职业生涯中必须重视和不断提升的一项能力。编程修养并不仅仅是掌握技术细节或者编程速度,更重要的是程序员的综合素质。以下是对这些修养的详细解释: 1. **专研精神**:程序员应具备...

    编程修养,资深专家陈皓

    【编程修养】是资深专家陈皓探讨的重要主题,旨在强调程序员除了掌握技术细节之外,还需要具备一系列非技术性的素质和习惯。陈皓认为,优秀的程序员不仅要有专研精神,能够不断学习并善于提问,还需要拥有积极的态度...

    C编程小细节

    在C语言编程中,有很多细节需要注意,这些细节往往会影响程序的正确性和效率。以下是一些关键点的详细说明: 1. **for循环的灵活性**:for循环的三部分——初始化、条件检查和更新,都可以被省略。例如,`for(int i...

    宝马工程师E系E90编程中文版教程.doc

    "宝马工程师E系E90编程中文版教程" 本教程主要介绍了宝马E系E90...在编程过程中,需要注意的一些细节,如软件的版本、数据线的接头等。 通过本教程,宝马车主可以轻松地进行编程,实现他们自己的宝马行车电脑编程。

    汇川AM600系列中型 可编程控制器编程手册(运动控制篇)

    汇川AM600系列中型可编程控制器在运动控制领域拥有广泛的应用,手册中的知识点和技术细节对于希望掌握其编程和应用的技术人员来说至关重要。正确的操作和安全意识也是确保设备正常运行的基础。通过本手册的学习,...

    使用stl 注意细节

    STL 使用注意细节 STL(Standard Template Library)是 C++ 编程语言中的一个标准库,提供了许多有用的容器、算法和迭代器,帮助开发者快速构建高效、可靠的程序。然而,使用 STL 需要注意一些细节,以避免常见的...

    结构化文本(ST)编程参考手册.pdf

    - 特别地,在可编程控制器CPU处于运行状态下进行程序变更(即“运行中写入”)时,需根据操作条件可能出现程序损坏等问题,必须在充分了解GXDeveloper操作手册中的注意事项后进行操作。 ### 修订记录 文档的修订...

    华为JAVA编程规范、编程军规

    以上只是部分基于华为JAVA编程规范的知识点,具体细节需要参考《JAVA编程军规.doc》《JAVA十大低级错误.doc》《华为_Java编程规范.pdf》《华为JAVA编程规范.doc》等文档。这些规范旨在提升代码质量和团队协作效率,...

    WINDOWS高级编程指南.pdf

    Windows高级编程指南在技术深度和细节上提供了丰富的内容,让开发者能够编写出更高效、稳定的Windows程序。 书中详细讲述了Win32应用程序接口(API)的高级使用方法,以及如何在32位Windows操作系统上,例如Windows ...

    高中信息技术Python语言编程教学实践.pdf

    实践中,教师需要设计一系列由浅入深的编程任务,让学生尝试修改代码、编写程序、运行调试,并进行结果评估与分析。实践课程不仅包括相对简单的程序编写任务,如打印图形或数字变换,还包括更具有挑战性的项目,比如...

    Erlang编程规则——中文翻译版本

    在Erlang中,存在一些内置函数(BIFs)和特殊语法,它们是语言的核心组成部分,但使用时需要注意它们可能带来的副作用。 常见错误部分列举了一些编程中应当避免的错误实践,比如使用硬编码的模块名,或者在函数中产生...

    c语言嵌入式编程注意事项.doc

    在C语言嵌入式编程中,需要注意的关键点涵盖了多个方面,包括但不限于软件架构设计、内存管理、I/O操作以及性能优化。以下是对这些关键点的详细解释: 1. **软件架构**:良好的软件架构是项目成功的基础。在嵌入式...

Global site tag (gtag.js) - Google Analytics