有些C++ 程序员,特别是只写C++ 没有写过 Python/PHP 等慢语言的程序员,容易对性能有心智负担,就像着了魔一样,每写3 行代码必有一行代码因为性能考虑而优化使得代码变形(复杂而晦涩)。

我认为,任何系统级的代码,都不应该刻意地在代码层面"形式化"地在表面功夫上面考虑性能优化,而是应该把心思放到如何让代码更简洁和清晰上面。如果逻辑清晰度能提高10%,代码行数能减少10%,即使单个模块性能下降20%,也应该做这笔交易。理论上,即使单个模块性能下降20%,整个系统的性能下降也许只有1%(阿姆达尔定律)。根据经验,如果代码行数减少逻辑清晰度增加,带来的往往是性能提升而不是下降。

如果一个C++ 写的系统中用到了超过 3 处 std::move,就证明程序员有心智负担了。 std::move 并不是性能优化的手段,而是检测系统是否变臭的标记。为了不让检测方法失效,也就是为了避免程序员逃避检测, std::move 外面裹了一层糖衣,吸引那些着了魔的程序员主动来接受检测主动暴露。这个符号证明程序员花了大量的精力去追求表面功夫,而不是把心思放在如何让系统更简洁和清晰上面。

lock free 也是检测一个 C++ 系统是否发臭的标记,如果你能在代码中感受到程序员在极力避免使用锁,也就是明明可以用一行锁解决的事,它偏偏封装了5 个辅助类,引入了3 个概念,那么,显然你也闻到了发臭的味道。

为什么要强调C++ 呢? 因为一个 C++ 程序员诞生的时候,他有极高的机率沾染上"过度优化"的毛病,这个毛病一直伴随许多C++ 程序员的职业生命周期。这是一个慢性病,影响程序员的个人职业发展,毁坏程序员参与开发的系统。


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

C++程序员容易走入性能优化误区!对此你怎么看呢?的更多相关文章

  1. 面向.Net程序员的后端性能优化实战

    最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一 ...

  2. shader程序员需要注意的优化Tips

    在写shader的时候,其实一些写法对于其执行影响非常大,而且由于gpu和cpu在架构上的不同,代码的优化思想也不一样,最近一直在写几个shader,为了性能问题,查阅了很多资料,把一些tips总结下 ...

  3. 程序员必备SQL语句优化技巧

    1.任何地方都不要使用 select * from t ,用具体的字段列表代替"*",不要返回用不到的任何字段. 2.尽量使用数字型字段,字符型会降低查询和连接的性能,并会增加存储 ...

  4. Java程序员常用Linux性能分析命令

    性能分析 vmstat 虚拟内存统计 用法 Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive ...

  5. Android布局性能优化—从源码角度看ViewStub延迟加载技术

    在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码 ...

  6. 90 % Java 程序员被误导的一个性能优化策略

    我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策 ...

  7. Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  8. PHP程序员福利“看免费直播,学MySQL索引优化”

    六星教育了解到,MySQL是目前所知PHP最流行的关系型数据库管理系统之一,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.之所以它会成为主流使用数据库,这 ...

  9. Android应用程序性能优化Tips

    对于我们设计的应用需要做到以下特征:build an app that's smooth, responsive(反应敏捷), and uses as little battery as possib ...

随机推荐

  1. nodejs gulp如何获取参数

    比如执行gulp test 如果需要获取test,使用命令process.argv即可 如果执行gulp test --module aaaa,这句话表示的意思执行gulp test,顺带参数modu ...

  2. 一天学习一点之express demo

    接着上一篇,安装了nodejs之后,再安装express,顺序执行以下命令 1.npm  -g install express; 2.npm -g express-generator; 3.使用exp ...

  3. python中常见的数据类型

    str 常用方法 1. 索引(下标) s = 'ABCDEFGHIJKLMN's1 = s[0]print('s[0] = ' + s1)   #s[0] = A 2. 切片:顾头不顾尾 s = 'A ...

  4. 管理用户和组 、 tar备份与恢复 、 cron计划任务-云计算学习(4)

    配置用户和组账号 问题 本例要求创建下列用户.组以及组的成员关系: 新建用户 alex,其用户ID为3456,密码是flectrag 创建一个名为 adminuser 的组 创建一个名为 natash ...

  5. Hadoop基础(一):概论

    1.大数据概念 2 大数据特点(4V) 图2-2 大数据特点之大量 图2-3 大数据特点之高速 图2-4 大数据特点之多样 图2-5 大数据特点之低价值密度 3 大数据部门业务流程分析 4 大数据部门 ...

  6. 06 flask源码剖析之路由加载

    06 Flask源码之:路由加载 目录 06 Flask源码之:路由加载 1.示例代码 2.路由加载源码分析 1.示例代码 from flask import Flask app = Flask(__ ...

  7. C# - 设计- Struct与Class的选择

    选择Struct的原则 该类型的实例较小且通常为短生存期,或者通常嵌入到其他对象中. 它以逻辑方式表示单个值,类似于基元类型( int .等 double ). 它的实例大小为16字节. 它是不可变的 ...

  8. 04-Python函数

    一.简介 函数是可重用的程序代码块.函数的作用,不仅可以实现代码的复用,更能实现代码的一致性.一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现. 函数用关键字def来定义,def关 ...

  9. 【IDEA】创建maven项目,webapp没有被标识,无法识别

    问题描述 新建maven项目模块后,webapp目录未被标识,也就是没有小蓝点的图标显示. 解决方法 点击"File"下的"Project Strucure", ...

  10. PowerShell创建参考窗口

    背景 平常我们经常遇到这样一个问题,在使用一个窗口工作时常常需要参考其他窗口的文字或图片,此时就需要频繁切换窗口:或者是看视频时需要参考前面进度的画面:或者是阅读或写文档时需要参考其他位置的文字,这时 ...