实例成员与静态成员与非类方法的开销
Cost of instance members vs. static members vs. non-class methods
这是一个很普通的问题,但我还没有找到C++的明确和具体的答案。
我有一个类有很多方法,其中可能有大量实例同时实现,并调用一些时间关键的方法(<5(,即对于实时模拟,其他方法不是时间关键的。将非关键方法声明为静态成员,甚至声明为非类函数(尽可能相关/可能(是否更节省时间。
现在,动态方法与静态方法或非类方法的内存成本如何?在任一选项中都有大量实例,是否存在内存不足的风险?
如果我错过了准确回答这个问题的参考资料,请原谅我,或者只是给我一个如何继续的提示,提前谢谢!
您找不到具体答案的原因是,尝试预测优化器的操作可能很困难。
最近,当我试图找到这个问题的答案时,我比平时更深入地研究了代码,在这个问题中,一个所谓完全无害的更改对性能的影响很小,但可以衡量。
如果你读了我对代码的深入研究的结果,优化有点像蝴蝶原理。一个微小的变化可能会产生"连锁反应",产生的影响比你第一眼看到的要大得多。当然,在这种情况下只有3%左右,但在时间关键型代码中,这可能很重要。我知道,我去过那里。(
因此@Cheers和hth-Alf是100%正确的。您可以确定的唯一方法是尝试所有可能的组合并对其进行基准测试。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- 函数从唯一代码调用正确的子类方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- 实例成员与静态成员与非类方法的开销