首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么复制对比复制结构慢?

为什么复制对比复制结构慢?
EN

Stack Overflow用户
提问于 2021-03-22 18:45:37
回答 1查看 76关注 0票数 3

我想向我的团队展示为什么移动语义可以节省资源。所以我写了一些代码来为演讲获取一些数字。然而,在这项工作中,我发现了一些我不完全理解的有趣的东西。复制成对的向量比复制等价结构的向量花费的时间要长得多。你知道为什么吗?

输出:

代码语言:javascript
复制
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

代码:

代码语言:javascript
复制
#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>();
}
EN

回答 1

Stack Overflow用户

发布于 2021-03-22 20:57:01

哦,掌心!迈克·维恩一语中的。我正在使用我的调试构建设置,但没有进行优化。

以下是我针对相同代码的优化结果:

代码语言:javascript
复制
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

感谢大家的评论:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66744522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档