c++ - 实例成员与静态成员与非类方法的成本
问题描述
这是一个非常笼统的问题,但我还没有为 C++ 找到明确而具体的答案。
我有一个包含许多方法的类,它可能有大量实例同时实现,同时调用几个方法(<5),这些方法是时间关键的,即用于实时模拟,其他方法不是时间关键的。将非关键方法声明为静态成员,甚至声明为非类函数(尽可能相关/可能)是否会更省时。
现在动态方法与静态方法或非类方法的内存成本如何?在任一选项中是否存在大量实例的内存短缺风险?
如果我错过了准确回答这个问题的参考,请原谅我或只是给我一个提示如何继续,提前谢谢!
解决方案
您找不到具体答案的原因是试图预测您的优化器将如何做可能很困难。
最近,当我试图回答这个问题时,我对代码的挖掘比我通常所做的要深入得多,在这个问题上,一个所谓的完全无害的更改对性能的影响很小但可以衡量。
如果您阅读了我对代码进行的深入研究的结果,优化有点像蝴蝶原理。一个微小的变化可能会产生“涟漪效应”,产生的影响比您乍看之下预期的要大得多。当然,在那种情况下它只有 3% 左右,但在时间关键的代码中,这可能很重要。我知道,我去过那里。;)
因此@Cheers 和 hth - Alf 是 100% 正确的。您可以绝对确定的唯一方法是尝试所有可能的组合并对其进行基准测试。
推荐阅读
- reactjs - 错误:要使用需要 `addCSS` 的插件(例如关键帧、媒体查询),请将您的应用程序包装在 StyleRoot 组件中
- c++ - C++17 中的 Lambda 表达式:用于类型转换的尾随返回类型与 static_cast
- javascript - 有没有调试失败的承诺的好方法?
- c++ - 用户定义数据类型的大小和继承
- mongodb - 如何使belongsTo关系在loopback4中工作
- javascript - 为什么扩展运算符将数据嵌套在另一个对象中?
- python - 在 tkinter 中实现时的热图大小问题
- android - 无法恢复微调器的选择状态
- sql - 从 SQL 视图映射 JPA 实体中的集合属性
- javascript - 如何在组件方法中调度操作后立即使用更改存储的状态?