好的,这就是我想要的:
- 我已经编写了几个要求非常高的函数(主要是在位图等上运行),它们必须尽可能快
- 现在,我们还要提一下,这些函数也可以按类型分组,甚至可以按它们操作的变量类型分组。
- 问题是,除了算法的实现之外,我还应该做些什么 - 从技术的角度来看 - 以免搞乱速度。
现在,我正在考虑以下情况:
- 将它们创建为简单的函数,并将必要的参数作为参数传递
- 创建一个类(用于“分组”/组织目的)并将它们声明为静态
- 按类型创建类,例如创建一个用于处理位图的类,为每个位图创建该类的一个新实例(例如
Bitmap* myBitmap = newBitmap(1010);
),并使用其内部方法对其进行操作(例如myBitmap->getFirstBitSet()
)
现在,这些方法中哪种最快?在性能方面,直接的简单函数和类封装的 static
函数之间真的有什么区别吗?我没有提到的任何其他更可取的方案?
旁注:我正在使用 clang++
编译器,适用于 Mac OS X 10.6.8。 (如果这有什么不同的话)
最佳答案
在 CPU 级别,只有 one kind of function ,它非常像 C 类。你可以自己制作,但是......
事实证明,在构建时考虑效率的 C++ 将大多数函数直接映射到调用指令:
- 命名空间级别的函数就像一个普通的 C 函数
- 静态方法就像命名空间级别的函数(从调用的角度来看)
- 非静态方法与静态方法非常相似,除了一个隐式的
this
参数是在其他参数之上传递的(一个指针)
所有这 3 个都具有完全相同的性能。
另一方面,virtual
方法有轻微的开销。有一份关于性能的 C++ 技术报告估计,与非虚拟方法相比,empty 函数的开销在 10% 到 15%(来自内存)之间。这意味着对于任何内部有肉的功能(即,做真正的工作),开销本身都接近于在噪音中消失。除非可以在编译时推断出 virtual
调用,否则真正的成本来自内联的抑制。
关于c++ - 类方法 VS 类静态函数 VS 简单函数 - 性能方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13873920/