Optimizing software in C++
文章平均质量分 78
《Optimizing software in C++》学习笔记,大部分内容来自《Optimizing software in C++》以及网络中对于该书的翻译版。
AscendingOne
这个作者很懒,什么都没留下…
展开
-
7.19 结构体和类的效率
结构体和类对于效率的积极影响:对于结构体和类,其成员会被存储在一起,这样使得数据缓存更有效率。在将结构体或类当做参数传递时,不需要将成员变量分开成一个个的参数,避免了参数传递的开销。对于效率的不良影响:非静态成员函数拥有一个this 指针(因为this 指针总是可用的),该指针作为隐形参数传递给函数。this 的参数传输开销会在所有非静态成员函数上产生。this 指针占用一个寄存器。在32位系统中,寄存器总是一个稀缺资源。类的数据成员(变量实例)类或结构体的数据成员是按创建类或结构原创 2021-06-08 21:33:58 · 898 阅读 · 0 评论 -
7.12 基础语句和函数的效率
目录分支和switch语句循环循环控制条件清除或复制数组函数函数函数参数函数返回类型函数尾调用递归函数分支和switch语句现代微处理器的高速运转一般通过流水线实现,指令在执行之前,会在不同的几个阶段中被提取和解码。刚代码中存在分支时,处理器不知道应该把那个分支放入流水线进行计算,如果错误的分支被送入流水线,那么需要10-20个时钟周期才可以检测到错误,并且之前的工作也被浪费。为了减少上述情况的发生,我们使用分支预测,根据分支的过去情况和附近分支来预测将来的情况。如果分支的可预测性很差,可以通过原创 2021-05-30 19:43:33 · 110 阅读 · 0 评论 -
7.6 指针、引用、数组和类型转换的效率
指针和引用指针和引用使用指针和使用引用两者的效率是一样的,编译器生成的代码完全相同,区别仅仅在于编程风格。指针算数运算指针实际上是一个保存内存地址的整数,因此指针算数运算和整数运算一样快。函数指针如果可以预测目标地址,那么通过函数指针调用函数通常要比直接调用函数多花几个时钟周期。如果目标地址被错误的预测,那么可能会导致长时间的延迟。成员指针(member pointers)没遇到过,遇到再补。智能指针没遇到过,遇到再补。数组数组是通过在内存中连续存储元素来实现原创 2021-05-30 15:36:42 · 383 阅读 · 0 评论 -
7.2&3 变量和运算符的效率
目录整数变量和运算符整数大小有符号整数和无符号整数整数运算符自增和自减运算符浮点变量和运算符浮点计算枚举布尔值布尔值的操作顺序布尔值的过度检查布尔向量操作整数变量和运算符整数大小如果定义一个int类型,而不指定该类型的大小,那么编译器将自动选择效率最高的整数大小。只要不进行除法,32位整数和64位整数只有很小的差别。有符号整数和无符号整数大多数时候,有符号整数和无符号整数在速度上没有差别。但是,当一个整数除以一个常数时,无符号要快于有符号。对于大多数指令集,有符号整数比无符号整数转化原创 2021-05-26 18:53:14 · 190 阅读 · 1 评论 -
不同类型变量的存储位置及相对效率
目录前言不同范围类型的变量,应在哪里存储栈存储(Storage on the stack)全局或静态存储(Global or static storage)寄存器存储(Register storage)易变变量(volatile)线程本地存储(Thread-local storage)Far动态内存分配类中声明的变量前言如果说并行计算是常数级的效率优化,并不能改变所运行算法的时间复杂度,那么C++语言的相对效率就是在程序的众多细小的地方进行改善。可能每个微小的改变之会让程序快几个时钟周期。但是,如果这个原创 2021-05-26 10:30:13 · 398 阅读 · 0 评论