2016-10-22 9 views
-1

ベクトルのコピーは、新しいメモリを変更しようとするときにのみ割り当てる必要があります。なぜC++ Stlはメモリを節約するためにベクトルの共有リソースを使用しませんか?

#include <vector> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    vector<char> vec(100 * 1000 * 1024, 3); // allocating 100*1000*kib, nice. 
    vector<char> array[] = {vec,vec,vec,vec}; // now we using 500*1000*kib, VERY NICE, no more! 

    return 0; 
} 
+2

標準では、明示的に 'std :: vector'に対するwrite-on-writeを禁止しています。 –

+0

@ GundolfGundelfinger適切な引用の回答としてそれを書いてください。 –

+2

@GundolfGundelfingerそれはさらに良かった:) –

答えて

1

コピーオンライトはstlではサポートされていません。 COWを持っていたストリング、ポストC++ 11はもうしません。 COWはメモリを節約する方法として魅力的ですが、イテレータは無用になります。

すべてのアクセスで、基礎となるストアをロックする必要があります。これは、コンテナのコピーが別のスレッドに渡された場合には、低速の原子検査である必要があります。

関連する問題