如何解决为什么复制对比复制结构慢?
我想向我的团队展示为什么移动语义可以节省资源。所以我写了一些代码来获得一些数字。然而,在这项工作中,我发现了一些我并不完全理解的有趣的事情。复制成对的向量比复制等效结构的向量花费的时间要长得多。 任何想法为什么?
输出:
std::pair<int,int>
===============
- sizeof type: 8
- sizeof container: 16
- copy = 80392 microseconds
- move = 6 microseconds
PAIR
====
- sizeof type: 8
- sizeof container: 16
- copy = 6377 microseconds
- move = 8 microseconds
代码:
#include <iostream>
#include <vector>
#include <chrono>
template <typename T>
void
MoveCopyComp()
{
std::vector<T> list;
T dummy;
std::cout << "- sizeof type: " << sizeof(T) << "\n";
std::cout << "- sizeof container: " << sizeof(list) << "\n";
for (int num = 0; num < 1000000; ++num)
list.push_back(dummy);
auto t0 = std::chrono::steady_clock::now();
std::vector<T> copy = list;
auto t1 = std::chrono::steady_clock::now();
std::vector<T> movement = std::move(list);
auto t2 = std::chrono::steady_clock::now();
std::cout << "- copy = "
<< std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()
<< " microseconds\n";
std::cout << "- move = "
<< std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count()
<< " microseconds\n";
}
struct PAIR
{
int a;
int b;
};
int main(int argc,char **argv)
{
std::cout << "std::pair<int,int>\n===============\n";
MoveCopyComp<std::pair<int,int>>();
std::cout << "\nPAIR\n====\n";
MoveCopyComp<PAIR>();
}
解决方法
哦,脸掌! Mike Vine 在 shnoz 上击中了它。 我使用的是我的调试版本设置,但没有进行优化。
这是我对相同代码的优化结果:
std::pair<int,int>
===============
- sizeof type: 8
- sizeof container: 12
- copy = 2388 microseconds
- move = 0 microseconds
PAIR
====
- sizeof type: 8
- sizeof container: 12
- copy = 2672 microseconds
- move = 0 microseconds
感谢大家的评论:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。