效率优化
2015-06-11 17:47
387 查看
一:
1、减少IO,减少读文件次数
2、是否可以考虑分解任务,然后并行
3、代码层面,利用合理的数据结构,减少相应的数据copy,减少不必要的长跳转,减少str的搜索
4、避免阻塞
二:
C语言之所以能被广泛的应用,其高效率是一个不可忽略的原因,C语言的效率能达到汇编语言的80%以上,对于一种高级语言来说,C语言的高效率就不言而喻了。那么,C++相对于C来说,其效率如何呢?实际上,C++的设计者stroustrup要求C++效率必须至少维持在与C相差5%以内,所以,经过精心设计和实现的C++同样有很高的效率,但并非所有C++程序具有当然的高效率,由于C++的特殊性,一些不好的设计和实现习惯依然会对系统的效率造成较大的影响。同时,也由于有一部分程序员对C++的一些底层实现机制不够了解,就不能从原理上理解如何提高软件系统的效率。
三(1):
腾讯考了一题关于i++和++i的性能问题。当时觉得大多书上用的都是i++,再者对两者的性能区别也并不是特别清楚,就随大流选i++了。
总而言之,i++; 是一个右值,而 ++i 是一个左值。
加深印象,上述的两条语句可以用下面两个函数表示。
i++ 为
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
++i 为
function () {
i = i + 1;
return i;
}
可以参考这里获知详情。总而言之,i++ 语句需要个临时变量,去存储返回自增前的值。
不要忽略这个变量的意义,了解过 C 等“低级”语言的朋友,可能会了解变量的内部机制(重新祭奠我老去的 C 语言知识)。首先,申请(malloc)一段内存空间,然后将值塞(push,压栈)进去,最后不用了释放(free)。
大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下,我建议使用 ++i ,虽然这点的优化非常的小。
因此,++i的性能将比i++的性能略好。上文对二者的函数解释相当精彩!
三(2):
for(iterator it = begin(); it != end(); ++it)
{
return it->second;
}
for(iterator it = begin(); it != end(); it++)
{
return it->second;
}
每一次返回的结果是否相同??
两种方式iterator遍历的次数是相同的,但在STL中效率不同,前++返回引用,后++返回一个临时对象,因为iterator是类模板,使用 it++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对
象。
1、减少IO,减少读文件次数
2、是否可以考虑分解任务,然后并行
3、代码层面,利用合理的数据结构,减少相应的数据copy,减少不必要的长跳转,减少str的搜索
4、避免阻塞
二:
C语言之所以能被广泛的应用,其高效率是一个不可忽略的原因,C语言的效率能达到汇编语言的80%以上,对于一种高级语言来说,C语言的高效率就不言而喻了。那么,C++相对于C来说,其效率如何呢?实际上,C++的设计者stroustrup要求C++效率必须至少维持在与C相差5%以内,所以,经过精心设计和实现的C++同样有很高的效率,但并非所有C++程序具有当然的高效率,由于C++的特殊性,一些不好的设计和实现习惯依然会对系统的效率造成较大的影响。同时,也由于有一部分程序员对C++的一些底层实现机制不够了解,就不能从原理上理解如何提高软件系统的效率。
三(1):
腾讯考了一题关于i++和++i的性能问题。当时觉得大多书上用的都是i++,再者对两者的性能区别也并不是特别清楚,就随大流选i++了。
总而言之,i++; 是一个右值,而 ++i 是一个左值。
加深印象,上述的两条语句可以用下面两个函数表示。
i++ 为
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
++i 为
function () {
i = i + 1;
return i;
}
可以参考这里获知详情。总而言之,i++ 语句需要个临时变量,去存储返回自增前的值。
不要忽略这个变量的意义,了解过 C 等“低级”语言的朋友,可能会了解变量的内部机制(重新祭奠我老去的 C 语言知识)。首先,申请(malloc)一段内存空间,然后将值塞(push,压栈)进去,最后不用了释放(free)。
大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下,我建议使用 ++i ,虽然这点的优化非常的小。
因此,++i的性能将比i++的性能略好。上文对二者的函数解释相当精彩!
三(2):
for(iterator it = begin(); it != end(); ++it)
{
return it->second;
}
for(iterator it = begin(); it != end(); it++)
{
return it->second;
}
每一次返回的结果是否相同??
两种方式iterator遍历的次数是相同的,但在STL中效率不同,前++返回引用,后++返回一个临时对象,因为iterator是类模板,使用 it++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对
象。
相关文章推荐
- android:exported 属性详解
- rails的respond to format
- xctest错误问题解决
- ios中Raw文件系统常用文件夹
- java 读取配置文件
- 201506111312_《JavaScript权威指南——找元素位置函数、数组类型、数组对象》(p159-161)
- github 笔记
- 新浪sae配置微信公众号实现自动回复(一)
- ORCLE 性能调优概述
- 苹果App Store开发者帐户从申请,验证,到发布应用(2)
- NodeSchool——stream-adventure
- Web.xml配置详解
- Android学习之路2_五大布局
- iOS内存管理
- Redis介绍以及安装(Linux)
- NSTimer实现读秒、倒计时等周期性操作
- 天雷滚滚—window8.1的Telnet是默认关闭
- LeetCode 之 Merge Sorted Array — C++ 实现
- APS.NET Cookie
- iOS8 设置tableView的分割线