STL中的写时复制支持

Sep*_*ram 9 c++ compiler-construction stl copy-on-write

我刚刚阅读了一篇关于写时复制的维基百科文章(如果有任何支持它的文件系统很好奇),并对以下段落感到惊讶:

COW也在内核之外,库,应用程序和系统代码中使用.例如,C++标准库提供的字符串类是专门为允许写时复制实现而设计的:

std::string x("Hello");

std::string y = x;  // x and y use the same buffer

y += ", World!";    // now y uses a different buffer
                    // x still uses the same old buffer
Run Code Online (Sandbox Code Playgroud)

我不知道STL中是否支持copy-on-write.真的吗?它是否适用于其他STL类,例如std::vectorstd::array?哪些编译器支持该优化(特别是,我想知道G ++,英特尔C++编译器和Microsoft C++编译器)?

Bal*_*Pal 8

例如,C++标准库提供的字符串类是专门为允许写时复制实现而设计的

那是半真半假的.是的,它开始考虑COW的设计.但是在匆忙中,std :: string的公共接口搞砸了.导致它变得厌恶COW.这些问题是在标准出版后发现的,从那以后我们就一直坚持下去.因为目前std::string无法进行线程安全COW,并且野外实现不会这样做.

如果你想要一个使用COW的字符串,从另一个库中获取它,比如MFC/ATL中的CString.


归档时间:

查看次数:

5943 次

最近记录:

10 年,2 月 前