首页 > 解决方案 > 为什么在调用函数时创建变量比创建变量并将其传递给函数要慢?

问题描述

我创建了一个变量,在定义后我将变量名用于函数参数,这比在函数调用参数中立即创建变量要快。

例如,我运行了 5 次:

int  main()
{
  std::vector<some>             vector;
  boost::timer::auto_cpu_timer  _;

  for (size_t i = 0; i < std::numeric_limits<uint16_t>::max(); ++i)
  {
    some  value;
    vector.push_back(value);
  }
}

并得到:

 0.012644s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
 0.012056s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
 0.011773s wall, 0.000000s user + 0.010000s system = 0.010000s CPU (84.9%)
 0.011925s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
 0.011949s wall, 0.010000s user + 0.000000s system = 0.010000s CPU (83.7%)

但是这段代码:

int  main()
{
  std::vector<some>             vector;
  boost::timer::auto_cpu_timer  _;

  for (size_t i = 0; i < std::numeric_limits<uint16_t>::max(); ++i)
  {
    vector.push_back(some { });
  }
}

给我吗 :

 0.013350s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
 0.013896s wall, 0.010000s user + 0.000000s system = 0.010000s CPU (72.0%)
 0.013314s wall, 0.010000s user + 0.000000s system = 0.010000s CPU (75.1%)
 0.015149s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)
 0.012713s wall, 0.000000s user + 0.000000s system = 0.000000s CPU (n/a%)

这比创建变量然后将其传递给函数要慢。为什么 ?有什么区别?


注意:结构some是:

struct some
{
  std::string  name, family;
  uint16_t     age;

  struct
  {
    std::string  another_one;
    uint16_t     another_one_age;
  }  some_time;
};

注意:我不使用任何特殊的编译器标志来编译这些程序。

标签: c++performance

解决方案


我敢打赌,有一个函数会创建一个vectorN some。这可能比您的for循环快得多。


推荐阅读