STL中的写时复制支持
Copy-on-write support in STL
我刚刚读到维基百科上一篇关于写时复制的文章(很好奇是否有任何文件系统支持它),并对以下段落感到惊讶:
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
我不知道STL完全支持写时复制。这是真的吗?它是否适用于其他STL类,例如std::vector
或std::array
?哪些编译器支持这种优化(特别是,我想知道G++、英特尔C++编译器和微软C++编译器)?
例如,C++标准库提供的字符串类是专门为允许写时复制实现而设计的
这是一半的事实。是的,它在设计之初就考虑到了COW。但在匆忙中,std::string的公共接口被搞砸了。导致它变得对COW充满敌意。这些问题是在标准发布后发现的,从那以后我们就一直坚持下去。按照目前的情况,std::string
不能被线程安全地COW,而野外的实现也不能做到这一点
如果你想要一个使用字符串的COW,可以从另一个库中获取,比如MFC/ATL中的CString。
gcc对std::string使用引用复制。从4.8版本开始,尽管它违反了标准,但它仍然在为C++11做这件事。
请参阅此处:
- 在GCC 4.x/C++11中是否引用了std::string
- 关闭GCC中的COW
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 编译时未启用intel oneApi CUDA支持
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 为什么istream不支持右值提取
- 当从函数参数中的临时值调用复制构造函数时
- 用于 XML 的自定义 wxDataObject 格式,用于复制粘贴支持
- 自动复制=按值并支持多态性的适当类型的非静态字段
- 支持复制构造的对象和不支持复制构造的对象之间的泛型C++复制
- 为什么 strcpy 从 Microsoft 支持重叠复制并带来潜在的泄漏风险
- STL中的写时复制支持
- Std::fill_n的右值,是否只支持复制填充
- OpenCV Mat::operator=-是否支持写时复制
- 为什么在这种情况下不调用赋值运算符以支持复制构造函数