摘要:
嵌入在咖啡机和微波炉中的简单的微处理器被设计为执行指令的速度与从内存中获取指令一样快。桌面级微处理器则有额外的资源并发地处理指令,因此它们执行指令的速度可以比从主内存获取指令快很多倍,多数时候都需要高速缓存去“喂饱”它们的执行单元。对优化而言,这意味着内存访问决定了计算开销。如果没有其他东西“妨碍” 阅读全文
摘要:
C++ 对用户所撒的最大的谎言就是运行它的计算机的结构是简单的、稳定的。为了假装相信这条谎言,C++ 让开发人员不用了解每种微处理器设备的细节即可编程,如同正在使用真实得近乎残酷的汇编语言编程一样。 阅读全文
摘要:
任何运行于现代操作系统中的程序都会与同时运行的其他程序、检查磁盘或者新的 Java 和Flash 版本的定期维护进程以及控制网络接口、磁盘、声音设备、加速器、温度计和其他外设的操作系统的各个部分共享计算机。每个程序都会与其他程序竞争计算机资源。 程序不会过多在意这些事情。它只是会运行得稍微慢一点而已 阅读全文
摘要:
1.C++ 程序只需要表现得好像语句是按照顺序执行的。C++ 编译器和计算机自身只要能够确保每次计算的含义都不会改变,就可以改变执行顺序使程序运行得更快。 自 C++11 开始,C++ 不再认为只有一个执行地址。C++ 标准库现在支持启动和终止线程以及同步线程间的内存访问。在 C++11 之前,程序 阅读全文
摘要:
C++ 程序至少会假装相信讲解过的简单的计算机基本模型中的一个版本。 其中有可以以固定字符长度的字节为单位寻址,在本质上容量是无限的内存。有一个与其他任何有效的内存地址都不同的特殊的地址,叫作 nullptr。整数 0 会被转换为 nullptr,尽管在地址 0 上不需要 nullptr。有一个概念 阅读全文
摘要:
1.如今所使用的微处理器设备的种类多样,从只有几千个逻辑门且时钟频率低于 1MHz 的价值 1 美元的嵌入式设备,到有数十亿逻辑门且时钟频率达到千兆赫兹级别的桌面级设备。一台包含数千个独立执行单元的大型计算机的尺寸可以与一个大房间相当,它消耗的电力足够点亮一座小城市中所有的电灯。这很容易让人误以为这 阅读全文
摘要:
8-优化内存管理 内存管理器作为 C++ 运行时库中的一部分,管理着动态内存分配。它在许多 C++ 程序中都会被频繁地执行。C++ 确实为内存管理提供了丰富的 API,虽然多数开发人员都从来没有使用过。 阅读全文
摘要:
6-使用更好的数据结构 选择最合适的数据结构对性能有着深刻的影响,因为插入、迭代、排序和检索元素的算法的运行时开销取决于数据结构。除此之外,不同的数据结构在使用内存管理器的方式上也有所不同。另一个原因是数据结构可能有也可能没有优秀的缓存本地化。 7-提高并发性 大多数程序都需要等待发生在物理现实世界 阅读全文
摘要:
5-移除计算 除了内存分配和函数调用外,单条 C++ 语句的性能开销通常都很小。但是如果在循环中执行 100 万次这条语句,或是每次程序处理事件时都执行这条语句,那么这就是个大问题了。绝大多数程序都会有一个或多个主要的事件处理循环和一个或多个处理字符的函数。找出并优化这些循环几乎总是可以让性能优化硕 阅读全文
摘要:
4-减少内存分配和复制 减少对内存管理器的调用是一种非常有效的优化手段,以至于开发人员只要掌握了这一个技巧就可以变为成功的性能优化人员。绝大多数 C++ 语言特性的性能开销最多只是几个指令,但是每次调用内存管理器的开销却是数千个指令。由于字符串是许多 C++ 程序中非常重要(和性能开销大)的部分。对 阅读全文