c++ - 类方法 VS 类静态函数 VS 简单函数 - 性能方面?

标签 c++ c macos class clang

好的,这就是我想要的:

  • 我已经编写了几个要求非常高的函数(主要是在位图等上运行),它们必须尽可能快
  • 现在,我们还要提一下,这些函数也可以按类型分组,甚至可以按它们操作的变量类型分组。
  • 问题是,除了算法的实现之外,我还应该做些什么 - 从技术的角度来看 - 以免搞乱速度。

现在,我正在考虑以下情况:

  • 将它们创建为简单的函数,并将必要的参数作为参数传递
  • 创建一个类(用于“分组”/组织目的)并将它们声明为静态
  • 按类型创建类,例如创建一个用于处理位图的类,为每个位图创建该类的一个新实例(例如 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/

相关文章:

c++ - Advanced SelectionSort - 在一次迭代中搜索两个元素

java - 链接依赖库时JNI "The specified procedure could not be found"

c - 等待 execlp

c++ - 使用(非类型)枚举参数定义内部类成员函数模板

c++ - MySQL 连接器 c++ 不包含 libmysql.lib

objective-c - 为什么我总是得到相同的随机值?

c - 为什么信号处理出现故障?

macos - Mac OS X 盖子打开/关闭事件日志

macos - 有没有办法在文件夹内右键单击并在 Mac 上打开终端? (就像 ubuntu 中的那个)

macos - 使用OS X中的另一个端口进行SSH连接?