【问题标题】:Which one is faster? A class function or a function with class pointer?哪个更快?类函数还是带有类指针的函数?
【发布时间】:2013-02-06 16:17:02
【问题描述】:

在我的程序中,我使用了几个类和大量的函数。我想知道哪一个会更快,或者它们之间在速度方面没有区别。

第一个:类函数

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
    calc_mex(vector<string>,vector<double>);
}; 

将被调用

mex m;
vector<string> v1;
vector<double> v2;
m.calc_mex(v1,v2);

第二个:带有类指针的函数

class mex{
  public:
    int length,nof_evaluations,nof_fast_evaluations;
    tree T;
}; 
calc_mex(mex*,vector<string>,vector<double>);

将被调用

mex m,*mptr;
mptr=&m;
vector<string> v1;
vector<double> v2;
calc_mex(mptr,v1,v2);

我在我的程序中使用了这两种方式,但更倾向于方式 1,因为它看起来更干净、更有条理。我还在程序的一次运行中调用了这些类型的函数 100K 次。所以我想知道他们中的任何一个是否会在时间方面做得更好。

谢谢!

【问题讨论】:

  • 您是否尝试过运行基准测试?
  • 我懒得这么做。因为我需要在这些函数中更改很多东西。
  • 在很多情况下,根本没有区别。当/如果有差异,几乎可以肯定是微不足道的。
  • 考虑到编译器只是要将非虚拟成员函数调用转换为带有指针的直接类 C 函数调用(因为 CPU 不会说 C++),它不应该做太多除非函数是虚拟的,否则完全不同。

标签: c++ class pointers


【解决方案1】:

决定因素应该是函数在逻辑上是否属于类,而不是速度。如果是,请使其成为会员。如果不让它成为一个独立的功能。

顺便说一句,每个成员函数都隐式传递了一个this 指针,因此两个版本之间没有太大区别。如果你真的关心性能。制作一个包含两个版本的示例程序,并在您的环境中使用大型数据集对其进行分析。

【讨论】:

  • 感谢 Alok Save。大多数这些功能在逻辑上属于类。如果没有时间差异,我会将它们放入课程中。
  • 你是在循环调用这些数十亿次吗?
【解决方案2】:

我赞同 Alok save 给出的答案,我必须重申 Donald Knuth 的声明(他很有名,所以声明必须是真的,显然......):

程序员会浪费大量时间来思考或担心程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小的效率,比如大约 97% 的时间:过早的优化是万恶之源。然而,我们不应该放弃那关键的 3% 的机会。

我在这个问题上的两分钱:测量一些东西,直到你非常确定你的“优化”将有利于程序。否则,随着时间的推移,您往往会生成变得更加不可读和不可维护的代码......

【讨论】:

    【解决方案3】:

    在 C++ 中,所有成员函数(除非它们是虚函数)都是独立函数,“this”作为第一个参数传入。选择其中一个不会让您获得任何速度提升,它们都只是函数调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多