74300


コピー元が不必要な場面では速度のためにコピーからムーブに変えたほうが良いとのことで、そのように実装し変えたところ、確かに早くなりました。では、なぜそもそもコピーはコンピュータにとって重いのでしょうか。  
ライトバック方式のときでも、書き込みはコストになりますか？それとも単にたくさんの命令を実行するからでしょうか？

例：

[code]

    #include <iostream>
    #include <memory>
    #include <array>
    #define SIZE 10000000
    
    struct A{
        std::shared_ptr<std::array<int, SIZE>> data;
        A(){
            data = std::make_shared<std::array<int, SIZE>>();
        }
        A(const A& other){
            std::cout << "copy" << std::endl;
            data = std::make_shared<std::array<int, SIZE>>();
            *data = *(other.data);
        }
        A(A&& other){
            std::cout << "move" << std::endl;
            data = other.data;
        }
    };
    
    int main(){
        A a;
        auto b = a; // 遅い
        auto c = std::move(a); // 早い
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2021-02-27T08:52:24.113
74298
2021-02-27T10:50:58.187
2021-02-27T10:50:58.187
4236
37013
question
c++
なぜメモリのコピーは遅いのですか？


質問文のコードは比較になっていません。

>
[code]

>     data = std::make_shared<std::array<int, SIZE>>();
>  
[/code]

このコードはメモリ確保が走ります。対して、ムーブの場合、メモリ確保が生じません。


CC BY-SA 4.0
2021-02-27T10:50:53.417
74300
2021-02-27T10:50:53.417
4236
74298
answer