时间:2022-10-09 18:03:10 | 浏览:459
原文作者Arne Mertz是一位C++狂热份子,有着丰富的开发经验。文中Arne Mertz针对简洁和性能的关系进行阐述,他认为,开发者不到万不得已时千万不要为了性能而牺牲简洁性,要学会使用工具来解决性能问题。
译文如下:
C++的强项之一是能写出非常高性能的代码。那么在实际中,我们该如何把握好性能处理的尺度呢?
性能≠效率
首先要明确的一点是我们必须把性能和效率区分清楚。这两者分别代表什么?
这看上去好像差不多,但其实不是。举个例子,假设你需要从A点到B点,效率意味着“最短路径”,性能意味着“以跑代走”。因此,即使以博尔特的速度到达终点,虽然高性能,但并不高效—“没有选择最短路径”。
对于程序来说,循环通常会耗费不少时间。这种情况下,性能意味着“单个循环用时越短越好”,效率意味着“尽量降低循环层数”。
性能并非程序的全部
这是很浅显的道理,但往往容易被忽视,特别是程序员新手。在不少编程论坛里,涉及代码性能优化的提问比比皆是。
有个说法是80%的程序运行时间是由约20%代码决定的,还有的说是90%/10%。因此,对于程序来说,关键运算代码可能仅存在于某小部分代码中。所以,如果把精力放在所有代码的优化上,而不重点主攻关键代码,其实是事倍功半的。
我们真的不懂如何写高性能的代码?
事实上,决定程序运行时长主要的因素是指令数的多少,但这不是由我们控制而是由编译器及其优化器所控制的。
优化器种类繁多,除非是该领域的专家,否则很难明白它对代码做了哪些优化工作。优化器可以销毁临时对象,可以内联函数,可以清除更多其它指令。
所以当这些不确定因素存在时,我们还能写出绝对高性能代码吗?如果真的很在意性能,我建议使用工具来辅助完成。
但也不必太悲观。如果有两种或更多的方法来写出同样可读的代码,那么不妨选择最高性能的写法。例如,在不存储结果的情况下,可以使用++iter来代替iter++。
性能和简单并不总是矛盾
影响程序运行时间的另一个重要因素是内存中数据的布局和结构。详细请参考Chandler Carruth的文章Efficiency with Algorithms, Performance with Data Structures。
补充一点,假如数据的内存布局不优良,那么会造成要花费很多时间来从获取数据,同时会造成指令冗余。
对于简洁和性能的关系,还可以参考文章Using the libraries you have, and using them right。
小结
建议默认编写出可读和简单的代码。如果你真的发现存在性能问题并已经找出其位置,那么仍然有很多选择来对此进行处理而不必为了追求快而写出复杂的代码。不到万不得已不要为了性能而牺牲简洁性,同时要学会使用工具来解决性能问题。
那么问题来了,CSDN各位网友,你会为了性能而牺牲代码简洁性吗?
英文出自:arne-mertz.de
(责编/夏梦竹)
程序员这个“物种”自诞生以来,便有了森严的等级制度,划分标准十分复杂却又有规律可循。经常在网上的论坛里看到大家讨论程序员的级别,由于级别不同,薪水也是有着天壤之别。“码农”和“程序员”虽说是调侃,但实质上还是有差别之处的。下面,黑马君就来说
作者 | 王晓波,同程旅行机票事业群CTO【写在前面】不就是比尔盖茨吗?我从初中就开始接触编程了。那个时候正好处在世纪之交,所有人的思想都很活跃,我父母在那个年代觉得未来的世界肯定是科技的,虽然他们不懂什么是电脑,但还是花大价钱给我买了一台
2020年有职场专家指出:四千元的月薪,在国内算是中等的薪资水平。每个月能赚到四千块,就打败了一半的国人;如果每个月能赚8000~10000,那你就能跑赢90%的国人。这几个数字是怎么得出来的?我们可以从两个方面加以推测和论证。第一,全国最
点击上方关注,每天学习进步一点“我希望用一篇文章完全让大家正确的理解从程序员到架构师、技术经理、技术总监、CTO的完整区别以及进阶要领。只有客观去认识,才会更加合理的找到自己的擅长点,从而更好的发展自己。上图是典型的薪资结构图,我们先从高级
这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时间挣钱,这是最最最笨的一种方式。在我看来在公司打工是一种时间不可复用,且技能又不断重复的苦力活。比如很多程序员就搞起了副业,有些副业收入
到昨天为止,做程序员,已经整整五年。最近半年来,我时常思考我走过这五年,反思我的职业工作,反思我的生活,我选择错了很多,也做错了很多。有些道理,到最近才幡然醒悟,遂决定谈谈我个人对软件工作的看法,以及一些生活的感悟。苦苦攒钱的年轻人我还在苦
在我的很多文章下面,都会有一些小伙伴,留言说他迷茫,不知道后面该怎么走。刚入门的,觉得自学怎么这么难,怎么完全没有方向。工作几年的,自以为自己什么都懂了,不知道接下来应该怎么办。其实,在各个阶段,每个人都会有迷茫期。今天我们就来聊聊,一个菜
编辑:桃子【新智元导读】程序员「35岁定律」更像是圈内人的自嘲。近日,一位45岁程序员发帖称,「自己精通各种技术体系,却连个面试机会都没有」。据统计,不论是在国内还是国外,35岁以上的程序员占比最少,尤其在中国仅有9.4%。大龄码农真的如此
众所周知,与其他职业的人来相比,程序员使用电脑的时间更长更多。因此,更应该注意保护自己的眼睛,避免近视、眼睛干涩、慢性结膜炎等眼部疾病。那么,保护眼睛视力,应该怎么做呢? 广州军区广州总医院眼科主任邹玉平主任医师建议: 1、眼睛与电脑屏幕的