c++ - 为什么在调用函数时创建变量比创建变量并将其传递给函数要慢?
问题描述
我创建了一个变量,在定义后我将变量名用于函数参数,这比在函数调用参数中立即创建变量要快。
例如,我运行了 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;
};
注意:我不使用任何特殊的编译器标志来编译这些程序。
解决方案
我敢打赌,有一个函数会创建一个vector
N some
。这可能比您的for
循环快得多。
推荐阅读
- authentication - 使用 ST25R3911B 实现 Mifare 经典 1K 读/写
- bash - curl 命令在 shell 脚本中不起作用,但在站点上运行良好
- python - PyQt5 QListView 拖放创建新的隐藏项
- c# - 正则表达式删除某些重复字符但忽略其他字符
- stylecop - 文档标题由无效的 xml 组成
- types - SHA-a 输出的数据类型是什么?
- php - 在 000WebHost 上上传的 Laravel 项目不起作用
- java - Spring Boot 2 从 Spring Boot 1.5 迁移与 entityManagerPackages 问题
- php - 如何在主机上运行队列?
- docker - 使用 docker 进行卷挂载后访问 /usr/share/nginx/html 的权限被拒绝