将没有成员的函子设置为类成员对象还是堆栈对象更有效
Is it more efficient to make an functor with no members a class member object or a stack object?
我有一个没有成员变量的函子。我想知道根据需要动态创建此函子或将其缓存为成员变量是否更有效。关于空基类优化和缓存局部性存在我不确定的问题。
struct Foo
{
int operator()(const MyData& data) const { ... }
};
对于空对象,只需在堆栈中创建它。将函子作为成员添加到类型将使所有对象变大。将其添加为基(以利用空基优化)将产生一个奇怪的设计,其中您的类型无缘无故地实现operator()(const MyData&)
。即使您将其设为私有,运营商也会在那里。
由于该类型没有成员,因此不存在缓存局部性问题,因为没有要访问的数据。无状态函子的主要用途是允许编译器内联对函数的调用(与同名的自由函数相比)
优化的一般规则是:首先编写代码使其工作,仅在证明有必要时才进行优化(换句话说,您已经分析了代码并发现了需要解决的瓶颈,以大大提高性能)。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 如何在构建对象堆栈时解决转换错误?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 声明成员对象而不调用其默认构造函数
- C++ 中类成员的堆栈的 pop() 函数
- 指向成员对象的指针 - 中断线程
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 应该在成员对象上调用析构函数
- 调用成员对象的构造函数
- 将 const 类型引用对象注册为类成员对象C++
- 修改类 c++ 中的成员对象
- 从成员对象调用方法
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- 构造函数,成员对象
- 成员对象为unique_ptr或在堆栈上
- 将没有成员的函子设置为类成员对象还是堆栈对象更有效
- 访问堆成员和堆栈对象之间的性能差异