C++性能优化大局观算法编程标准库编译器c++软件安装包

C++可算是一种声名在外的编程语言了。这个名声有好有坏。从好的方面讲,C++性能非常好,哪个编程语言性能好的话总忍不住要跟C++来单挑一下。从坏的方面讲,它是臭名昭著的复杂、难学、难用。

不管说C++是好还是坏,不可否认的是,C++仍然是一门非常流行且非常具有活力的语言。继沉寂了十多年后发布语言标准的第二版——C++11——之后,C++以每三年一版的频度发布着新的语言标准,每一版都在基本保留向后兼容性的同时提供着改进和新功能。

虽然在语言领域,也有Rust这样的新语言在向C++发起挑战,但是,不可否认的是,C++仍然是面向性能的领域里的编程语言王者。我甚至不认为C++在性能方面次于C——在极致追求速度时,C++可以比C更强,而C相比C++的主要优点是更加简单:不管是学习、使用,还是产生的二进制代码的体积上。

今天,我们就来大略讨论一下,C++是如何做到高性能的。

跟C语言一样,C++提供非常底层的数据操作能力,为开发者提供了灵活性。跟“高级”语言一样,C++提供了强大的抽象能力(可以说超越了大部分语言)。而且,相比C,C++要安全得多。在语言诞生的初期就是如此,现在就更不用说了。

C++的类型系统比C更加严格,因此虽然一直有C++是C的超集的说法,这个说法严格来说从来就没成立过。最近(2023年)碰到过一个程序崩溃的案例,简化来讲,就是开发者使用了一个char的二维数组(charnames[MAX_NAMES][MAX_NAME_LEN]),然后把它传给了一个接收char**参数的函数……这代码当然是错的,但C编译器虽然给了个告警,但编译还是没有失败。如果这是C++代码的话,那编译器就会直接报告错误,不给通过了。

而第二点,零开销抽象,对于C++的性能至关重要。我们有很多的抽象机制,同时,使用这些抽象机制并不会带来额外的开销。在某些情况下,使用这些机制,反而有“负开销”——“使用者”可以非常安全地使用这门语言,即可获得极高的性能。同时,C++还给予了“定制者”根据自己的需求来写出更贴近使用场景的库的能力,可以进一步方便“使用者”。

当然,定制对程序员的技能有非常高的要求。初学C++的更需要掌握C++的标准库的使用——用好标准库,就能获得非常不错的性能。正如高德纳大神的名言的完整版:

就在同一篇论文的同一页上,高德纳还写下了:

在成熟的学科里,对于12%的提升,如果易于获取的话,那绝不会被认为是微不足道;我相信,在软件工程里,相同的观点也会占上风。

而C++已经提供相当多的机制,可以允许我们很容易地获取高性能,在很多场景下远远超过高德纳所说的12%。

我经常举的一个例子是C++标准库的sort和C标准库的qsort:在关闭优化时,我在某一测试场景下得到了1:2.5的性能差异,C++似乎要慢不少;但一旦打开-O2(允许内联)时,两者的性能差异突变成3.5:1,C++的性能比C高出了好几倍!这就是所谓的“负开销”了。C++的代码比C的更简单、更直观,性能还更高。原因自然就是C++的函数对象和模板机制允许编译器更好地进行内联,从而产生更加高性能的代码。

任何情况下学习C++,第一需要了解的就是析构函数和RAII(resourceacquisitionisinitialization)惯用法。对,虽然C++诞生时名字是“带类的C”,但类和面向对象并不等同,对面向对象编程的支持并不是C++的最重要特性。C++的自定义类型的最特别之处不在多态,而在对其行为的定制上——最重要的就是对象销毁时应该做些什么。析构函数和析构函数带来的RAII惯用法,是C++里最重要的特性,也是用C++进行资源管理的关键。

重载是另外一个非常重要的C++特性。除了你不用在名字上区分process_char、process_string、process_int带来的方便性外,它对泛型编程也很重要,还对现代C++的一个基本特性“移动语义”非常重要。刨除语法上的细节,本质上来说,移动语义就是让程序员可以方便地区分会继续使用的对象和以后不再使用的对象,允许对后者使用构造函数和赋值运算符的重载来“窃取”其中的资源。对于一个普通的vector,拷贝的开销是O(n)或更高(如果vector成员是容器或其他具有高拷贝开销的对象),但移动开销通常(是,只是通常;不过通常你也不会遇到这种例外的特殊情况)是O(1),常数复杂度。这就是我们在C++里高效传递对象的一种常见方式了。

C++标准库里最常用的组件恐怕就是string和各种容器了。它们都对移动进行了优化。当然,除了这个基本的性能点外,容器都有各自的特殊性能点,比如不同情况下的插入性能差异。这些都是需要学习的地方。

前面我们已经提到过模板,而string和容器也都是模板,行为可以通过模板参数来进行定制,并允许高效的内联优化。模板当然是C++里比较复杂的一个地方,但基本的使用则相当简单:vector就是一个放int的vector,用起来跟一个普通的类没有区别——只是模板创建者的工作简单多了,不需要手工为不同的类型创建不同的类。

用好C++、在项目中获得令人满意的性能当然不止上面这一些。最基本的,我们还需要了解标准库算法,并合适地使用并发和并行来充分利用硬件。在本文中我们暂且就不展开了。

当我们用熟了C++之后,慢慢地,我们就会不再满足于C++标准库这一“制式武器”。我们会寻找适合自己的第三方库,甚至自己造轮子来满足项目的特定需求。此时,我们就需要进一步了解C++的高级特性。我们需要了解模板的进一步细节,尤其是特化。我们需要了解SFINAE和模板元编程。我们需要了解constexpr和它带来更方便的编译期编程。C++的使用者也许可以暂时不关心这些问题,但定制者,或者说项目里的框架搭建者和工具提供者,必须去了解C++的这些高级特性,为你的项目提供扎实的基础。

这种情况下,最合理的选择是使用某种intrusive_list,侵入式的链表,不需要在每次插入或删除时进行内存管理。C++标准库没有提供这个功能。你可以使用Boost里提供的容器,或者自己写一个新的。对于这个例子,Boost多半就足够好了。但总可能出现一些现成库解决不了的问题的,这时候,利用C++的高级特性来自己造轮子就是一件非常自然的事。我们可以做到既有合适的定制,同时用法又跟已有的容器相似,没有额外的学习成本。

或者,也许你希望使用分配器来创建一个容器内存池,来提供对内存的使用效率。这在C++里也是非常容易完成的,只要你了解合适的定制机制。根据洋葱原则,你可以不管这些定制点,直接用C++,这样最简单;也可以把标准库“切开”,以自己最喜欢的方式来拼接定制使用——当然,这种做法确实跟切洋葱一样,很容易就会哭鼻子的。但它确实能帮助你获得最高的可能性能

课程介绍

课程收获

名企好评

吴咏炜老师的《C++性能优化高端培训》课程是Boolan技术赋能培训的品牌课程,在华为、博世西门子、银科、大疆等很多著名企业内训都获得高度认可,得到参训学员一致好评。

该课程将于本周六(1月20日)正十开课,现在扫描下方二维码,都有机会领取C++之父的《C++白皮书中文版》

THE END
1.哪些软件是用C++写的哪些应用是c++语言开发的Amazon.com:大型电子商务应用软件。 Apple: OS X操作系统使用很多语言开发,但是几个重要的部分用C++开发的。两个比较诱人的部分分别是, 搜索器(Finder) IOKit设备驱动(IOKit是内核里面仅有使用C++的地方) 还有, AppleWorks iPod用户接口(Pixo应用框架用C++写的) https://blog.csdn.net/win_lin/article/details/17201021
2.麒麟软件C++麒麟软件C++招聘猎聘麒麟软件C++招聘频道为您提供大量的麒麟软件C++招聘信息,有超过10000多麒麟软件C++招聘信息任你选寻,招聘麒麟软件C++人才就来猎聘麒麟软件C++招聘!求职找工作就用猎聘聊。https://www.liepin.com/s/zzrjcf9b2/
3.c++开源软件c++开源软件开源软件腾讯云开发者社区BUSMASTER是由ETAS和BOSCH开发的全球开源免费的CAN通讯分析上位机软件,源代码开源,是基于C++软件开发的,功能强大,比国内某功的软件强大很多。BUSMASTER是用于设计,监视,分析和模拟CAN网络的开源PC软件。可以从Github下载BUSMASTER开源软件,由RBEI和ETAS赞助的BUSMASTER软件项目向研究和工业界开放。由发起人管理的项目的开放https://cloud.tencent.com/developer/information/c%2B%2B%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6-article
4.VisualC++软件官方下载VisualC++电脑版Visual C++ 官方版 软件大小:13MB 更新日期:24-07-18 软件语言:简体中文 软件类别:编程工具 软件授权:免费软件 适用平台:Win9x/Me/NT/2000/XP/2003 安全检测:360安全卫士360杀毒电脑管家 软件介绍人气软件 基于Microsoft Visual Studio 6.0 server pack 5 制作。汉化前请确认 Microsoft Visual C++ 6.0 及其相关程https://www.188soft.com/soft/892113.html
5.c/c++常用软件其它相关资料下载ssh工具:putty0.62,简单易用,支持ftp,vsftp,ssh,telnet,serial Ports.编辑工具:editplus(带注册码),notepad6.1.5,这两款都是代码编辑工具,各具优点,功能都非常齐全,写代码的必备。资源管理器:Q-Dir,该软件界面由四个资源管理窗口,便于文件比较,对照。调试助手:网络调试助手(NetAssist),串口调试助手(UartAssist)。https://download.eeworld.com.cn/detail/sinceyoulove/441778
6.DevDev-C++ 4.9.9.2(其中包括了Windows版gcc/g++ 3.4.2版)是一个 C++ 开发工具。它包括多页面窗口、工程编辑器,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。它也提供高亮度语法显示的,以减少编辑错误。文件下载:upload/2007_12/07120514085924.exe申明:本栏目作品均来自互联网,如有侵犯您的版权请与http://www.bbita.cn/show.aspx?id=60&cid=8
7.中学生C++创意编程从网络上搜索并下载Dev-C++软件,然后将其安装到自己的计算机中。 2.问题思考 ?问题1 如何下载并保存Dev- C++软件? ?问题2 如何安装Dev- C++软件? 编写程序,我们可以使用Microsoft Word、记事本等软件,但如何让计算机运行程序、接收指令呢?这就需要一个编译软件,我们通常将其称为集成开发环境(Integrated Developmenthttps://www.epubit.com/bookDetails?id=UB7da3ec87a344a
8.C/C++用什么软件编程一款方便顺手的编程软件对于 C/C++ 开发者们来说,无疑会节省非常多不必要的环境安装和学习使用教程的时间。看到一些回答围绕不同操作系统,推荐了不同的IDE。我在这里给大家介绍一个全平台都通用、轻量且功能强大的在线C语言编辑器 Lightly。它是首个根据中国开发者使用习惯量身打造的 IDE 编程软件,界面风格简洁明https://www.jianshu.com/p/64a3e216e1d9
9.编程软件C++编程c++下载,c++编程软件编程软件C++_编程c++下载,c++编程软件-C++代码类资源Ba**nt 上传30.36 MB 文件格式 rar VC++6.0绿色版亲测实用,若电脑为win10系统,则需自行安装MSDEV.EXE文件,将压缩包内文件替换掉即可。点赞(0) 踩踩(0) 反馈 所需:1 积分 电信网络下载 12CN10N-VB TO263一种N-Channel沟道TO263封装MOS管 https://www.coder100.com/index/index/content/id/1009756
10.亲测能用devc++v6.5DevC++编程软件简体中文版下载devc ++是一个c&c++的Windows开发工具。本软件为自由软件,符合GPL标准。它集合了GCC、MinGW32等许多免费软件,并可以获得最新版本的各种工具支持。dev - c++是一个非常实用的编程软件,许多著名的软件都是用它编写的,它在C语言的基础上,增强了逻辑。 https://software.3d66.com/list/detail_6010.html
11.小白学习C++,用哪个编程软件比较好?C++作为起源较早的编程语言之一,因其面向对象,功能强诸多特点被广泛应用,自然也成为小白首选编程语言之一,当然C++起源早,自然也有很多的编程软件,今天将为小伙伴们减少四款好用性价比高的C++编程软件,感兴趣的小伙伴可以试试看。 1、Visual Studio Visual Studio是指美国微软研发的开发工具包系列产品Microsoft Visual https://www.fanyedu.com/content/4508.html
12.c/c++图形编程软件有哪些?OSCHINA在软件开发中,"自举"通常指的是一种软件工程技术,即使用该软件本身(或者类似的工具)来构建、测试和部署自身的过程。这种过程有助于确保软件本身能够正常运行,并且能够不断改进和更新。 因此,如果一个集成开发环境(IDE)是通过使用自身来开发、测试和部署自身的话,那么可以说该IDE是自举的,并且这个词也不局限https://www.oschina.net/question/1248746_137722
13.请问哪个C++的编程软件好用些?1.VS简介VS是Visual Studio 的英文缩写,是美国微软公司推出的一种软件开发平台。在计算机领域享誉盛名。https://www.imooc.com/wap/wenda/id/568885
14.VisualC++6.0安装软件下载——我爱自学网当前位置:首页>>资料下载>>常用软件>> Visual C++ 6.0安装软件 Visual C++ 6.0安装软件更多>> 分享到:QQ空间新浪微博腾讯微博微信 名称:Visual C++ 6.0安装软件 下载分类:常用软件 压缩格式:rar 上传讲师:adm*** 下载次数:22574 上传时间:23:44:02 http://www.52zxw.com/download_info_261.html