1 Introduction

该手册面向想要提高软件速度的高级程序员和软件开发人员。假定读者对C++编程语言有很好的了解,并对编译器的工作原理有基本的理解。选择C++语言作为本手册的基础是因为其原因在下文第8页有解释。
该手册主要基于我对编译器和微处理器工作原理的研究。建议主要基于Intel、AMD和VIA的x86系列微处理器,包括64位版本。x86处理器被广泛应用于使用Windows、Linux、BSD和Mac OS X操作系统的常见平台,虽然这些操作系统也可以与其他微处理器和指令集一同使用。许多建议同样适用于其他平台和其他编译型编程语言。
这是一个系列手册中的第一本:
1. 《优化C++软件》:面向Windows、Linux和Mac平台的优化指南。
2. 《汇编语言子程序的优化》:面向x86平台的优化指南。
3. 《英特尔、AMD和VIA CPU的微体系结构》:面向汇编程序员和编译器制作者的优化指南。
4. 《指令表》:列出了英特尔、AMD和VIA CPU的指令延迟、吞吐量和微操作分解。
5. 《不同C++编译器和操作系统的调用约定》。
这些手册的最新版本可在www.agner.org/optimize上获取。版权条件请参见下文第180页。
只满足于使用高级语言编写软件的程序员只需阅读第一本手册。后续手册适用于那些想深入了解指令定时、汇编语言编程、编译器技术和微处理器微体系结构的人。
请注意,我的优化手册被全球数千人使用。我没有时间回答每个人的问题。所以请不要将您的编程问题发送给我,您将不会得到任何答案。建议初学者在尝试本手册中的技术之前,先在其他地方寻找信息并获得丰富的编程经验。如果在相关书籍和手册中找不到答案,互联网上有各种讨论论坛可以解答您的编程问题。
我要感谢那些给我发送错误修正和建议的人。我非常愿意接收新的相关信息。
1.1 Why software is often slow
在过去的几十年里,尽管微处理器性能呈指数级增长,但令人沮丧的长响应时间的软件产品仍然存在,这是一个悖论。在大多数情况下,导致性能不佳的原因并不是微处理器设计不良,而是软件设计不佳。很多时候,罪魁祸首是极度浪费资源的软件开发工具、框架、虚拟机、脚本语言和复杂的多层次软件设计。根据摩尔定律,硬件性能的增长正在放缓,因为我们接近了物理上可能的极限。相反,沃思定律戏称软件速度下降的速度比硬件速度增加的速度更快。
在这种情况下,建议软件开发人员改进软件,而不是依赖于越来越快的微处理器:避免使用最浪费资源的软件工具和框架,并避免功能膨胀。减少软件开发中抽象层级的程度实际上会使我们更容易理解不同代码结构的性能后果,本手册对此进行了解释。
1.2 The costs of optimizing
如今,编程的大学课程强调结构化和面向对象编程、模块化、可重用性、多层抽象以及软件开发流程的系统化。然而,这些要求常常与优化软件的速度或大小的要求相矛盾。
如今,软件教师常常建议函数或方法不应超过几行代码。几十年前的建议则正好相反:如果一个功能只被调用一次,就不要将其放入单独的子程序中。这种编写风格的转变原因在于软件项目变得更加庞大和复杂,对软件开发成本的关注增加,以及计算机性能的提升。
首先和首要的是,结构化软件开发的优先级高,而程序效率的优先级低,这体现在选择编程语言和接口框架上。这往往对最终用户不利,因为他们不得不购买越来越强大的计算机来应对日益庞大的软件包,并且甚至对于简单的任务,仍然对响应时间过长感到沮丧。
有时,我们需要在软件开发的高级原则上做出妥协,以使软件包更快、更小。本手册介绍了如何在这些考虑因素之间取得明智的平衡。讨论了如何识别和隔离程序中最关键的部分,并将优化工作集中在这个特定的部分上。还探讨了如何克服相对原始的编程风格的危险,因为该风格不会自动检查数组边界违规、无效指针等问题。同时,还讨论了在执行时间方面,哪些高级编程构造是昂贵的,哪些是廉价的。
总之,针对不同需求,在软件开发过程中需要权衡不同的因素。在进行性能优化时,需要确定和专注于最关键的部分。此外,应小心注意相对较原始的编程风格可能存在的问题,并考虑使用经济高效的编程构造。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值