【问题标题】:Constructors - regarding performance? [duplicate]构造函数——关于性能? [复制]
【发布时间】:2013-01-10 20:04:28
【问题描述】:

可能重复:
Optimization due to constructor initializer list

好的,这就是我的困境:假设我们有一个类,以及几个构造函数,它们将被多次调用(每秒数亿次;所以速度至关重要)。

哪种方式更可取? (有什么区别吗?)

方式A:

// Prototype
class MyClass
{
    public:
        // Constructor
        MyClass (int x, int y, int z) : X(x), Y(y), Z(z) {}

        // Variables
        int X,Y,Z;
};

方式 B:

// Prototype
class MyClass
{
    public:
        // Constructor
        MyClass (int x, int y, int z);

        // Variables
        int X,Y,Z;
};

// Implementation
MyClass::MyClass(int x,int y,int z)
{
     this->X=x;
     this->Y=y;
     this->Z=z;
}

【问题讨论】:

  • 为什么要猜测/询问而不是衡量?
  • @NPE 我首先要求避免重写大约一百行,只是因为我的一个概念毕竟可能是错误的(我的意思是从理论的角度来看)......
  • @Dr.Kameleon:您可以构建一个综合基准,并获得与您的环境相关的非常准确的答案。
  • 最好的优化可能是不每秒构造数亿个东西。
  • 我看不出第二种变体更适合的情况。

标签: c++ performance oop class constructor


【解决方案1】:

您需要使用个人资料工具自行测量。使用内置类型可能没有区别(关于构造速度),但对于类类型,使用成员初始化器列表总是更可取的方式。

【讨论】:

    【解决方案2】:

    用唐纳德·高德纳 (Donald Knuth) 的话来说:

    Premature optimization is the root of all evil.

    以最易读和可维护的任何风格编写代码;我个人的偏好是在标题之外单独实现。如果它足够小可以内联,编译器将内联它;如果编译器决定它足够大而不内联(以减少代码大小并节省指令缓存空间或其他),那么编译器将不会内联它。

    然后根据真实的经验数据进行基准测试和优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 2015-05-11
      相关资源
      最近更新 更多