c++的效率和可读性上 你一般是怎么折中的?

Matrix4X4 发布于 2012/04/04 11:23
阅读 1K+
收藏 1
如题
加载中
0
Yisen
Yisen
要性能高,就要多点用结构式的方法,少用点OO得思想,但这样会降低可维护性跟可重用性
Matrix4X4
Matrix4X4
@yisen : 非常感谢!
Yisen
Yisen
http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux 可以参考这篇文章
Matrix4X4
Matrix4X4
@yisen : 我也想过这种方法,但是跨平台会出现问题么?
Matrix4X4
Matrix4X4
如何找出这20%的代码呢?没有经验,希望指导!
Yisen
Yisen
用智能指针试试吧
下一页
1
中山野鬼
中山野鬼

可读性和效率本身不是非常矛盾的事情。如果你C++采用JAVA的类套类的方式这么随便写,可读性和效率都有问题。

效率和可读性都是个相对的词。效率其实还好写,如果修改了代码,除非是核心的函数或方法,否则只是从高级语言的语法结构上做调整,效率不会有可测的感觉。例如一个函数只占总计算时间的3%,你优化了这个函数的10%,总时间只提高了0.3%,这在非实时OS上基本上看不出来。因此,效率的提升,应该基于代码可读性的基础下,从各个层级上优化完成。往往到了代码级,更侧重优可读性本身。

关于可读性,这也很相对。例如C里面,高效的代码,通常大量使用了#define。如果你大脑的堆栈不够深,不能#define 套 #define,这不算代码不可读,在于你还不够理解。

如果你还不理解上面的概念,我可以举个简单的例子。如下代码

。。。
if (mode == XXX){
   ...
}else if (mode == YYY){
   ...
}else if ...
return 

假设上面有10种分支。即便是等概率进入,你平均需要5次判断和跳转。判断不怎么花时间,跳转会破CPU的指令流水线。

因此通常这么做

 done_XXX[mode](...);
  return;

用函数指针数组的方式,将各个if 内的代码,独立使用小函数来实现。这样做虽然增加函数调用,但是每个只有两次跳转,进函数,出函数。效率是后面的高,而且代码更清晰。你要不懂函数指针数组的方法,或不理解,怎么能说第二种不可读呢。当然我这个是特例啊。

只是想说明,代码的指令包括了可读性和效率。甚至包括汇编。对于DSP的汇编,越是工整的,往往效率越高,这是经验之谈,没什么理论证明。

 

chunquedong
chunquedong
举得这个例子,用switch语句就行了。
中山野鬼
中山野鬼
@大东哥 : 优化分支判断需要看概率,这是理论和工程的最大区别。一切的优化策略的展开都是以概率为基础条件的。
大东哥
大东哥
能不能展开讲讲, 优化分支判断这一块.
0
小熊猫大暴走
小熊猫大暴走
你开什么玩笑
Matrix4X4
Matrix4X4
我没有开玩笑啊! 有何高见,虚心求教!
Matrix4X4
Matrix4X4
为什么呢?
0
邢_901022
新手。。。回答这个问题,有些费劲
Matrix4X4
Matrix4X4
在effective c++中提及了一些建议,但是还是觉得有点少,希望大家再提及一些!
Matrix4X4
Matrix4X4
我看了些c++的开源代码!为了效率,宁愿牺牲可读性,代码看上去很晦涩!
0
Ruchee
Ruchee

既然都选择用C++了,自然得把可读性放在第一位,性能其次

那些开源代码都是Geek的杰作,不适合参考

Matrix4X4
Matrix4X4
@荷塘青草 现在手机游戏,是公司刚开的业务,我和另外一个人在搞,你说我能不纠结么?每次都是为了让大家提出好的建议或者可行的经验,把问题提的比较泛,结果每次都导致在讨论问题本身!痛苦啊!
Ruchee
Ruchee
@smartdot : 兄弟,你如果不是Leader,那你就跟团队规范走,只有Leader才应该有这样的纠结,非Leader如果也这样纠结那就是杞人忧天了
Matrix4X4
Matrix4X4
@荷塘青草 : 所以看看大牛门有什么好的意见或者经验什么的!结果是我和googler的讨论,我想撞墙了!
Matrix4X4
Matrix4X4
@荷塘青草 : 对啊!有时候还要内嵌汇编!有时候,就是为了是不是用单例模式都会争吵很久!烦死了!
Ruchee
Ruchee
@smartdot : 手机游戏确实就不同了,效率是必须放在首位的,你这得考虑具体的应用场景
下一页
0
小熊猫大暴走
小熊猫大暴走

可读性问题存在于各个编程语言中,各种强大的编程语言可读性问题都是会存在的。复杂的语法加上个人智慧的头脑,编写一段让你费尽脑汁的代码是很容易的。

至于效率问题,这取决于你的算法,设计及架构。设计过于臃肿的算法不一定比脚本快。

这个问题根本不是两三年c++程序员应该提出的。菜鸟就更别问了

 

 

Matrix4X4
Matrix4X4
其实设计模式架构什么的,有时候是在牺牲效率的!不信你可以试试!
0
小熊猫大暴走
小熊猫大暴走

好吧,我输了。从前 程序是用汇编写的,用汇编的话,程序性能很是提高(用经验的coder)但是可读性太差了。于是c诞生了(当然前面还有很多语言),性能有了,可读性也有了。ok!但是不是面向对象的,于是c++出现。c语言本身其实就是在解决可读性和性能的问题。

小熊猫大暴走
小熊猫大暴走
@smartdot : 可读和性能既然能够并存,又怎么会冲突
Matrix4X4
Matrix4X4
就是因为c++中可读性和性能并存,就会存在冲突,我的问题就是想希望大家,在这方面有好的经验,和大家一起分享,而不是去追溯问题!呵呵..
0
岛
我从来不觉得 c++的可读性和性能会冲突
0
小熊猫大暴走
小熊猫大暴走
c++语言的本身就是一个性能和可读的解决方案。
Matrix4X4
Matrix4X4
好吧 我输了~!我想撞墙!
小熊猫大暴走
小熊猫大暴走
@smartdot : 这不是c++本身的问题,这是你自己导致的问题
Matrix4X4
Matrix4X4
好吧我给你举一个例子,在c++开发中,也许你会资源的回收而苦恼,如果漫天的new delete乱飞,你会觉得代码舒服吗?而且和容易出错。但是你自己做一个垃圾自动回收的manager可以让代码看上去更优雅了,但是却牺牲了效率!
0
泡不烂的凉粉
泡不烂的凉粉

C 不存在 性能跟可读性的反比问题,不过C++有。

 

返回顶部
顶部