关于string的Copy-On-Write
看了篇关于string使用Copy-On-Write的文章:
http://blog.csdn.net/ckt1120/archive/2007/09/08/1777004.aspx
#include <string>
#include <iostream>
using namespace std;
void main()
{
string str1("hello world!");
string str2 = str1;
printf ("Before Copy-On-Write:\n");
printf ("str1's address: %x\n", str1.c_str());
printf ("str2's address: %x\n", str2.c_str());
str1[1] = 'q';
str2[2] = 'g';
string str3 = str2;
printf ("\nAfter Copy-On-Write:\n");
printf ("str1's address: %x\n", str1.c_str());
printf ("str2's address: %x\n", str2.c_str());
printf ("str3's address: %x\n", str3.c_str());
}
有个疑惑想请教:对于str3,我觉得应该是和str2共用一段内存空间,即打印出的地址应该相同。
但是结果却不同?
http://blog.csdn.net/ckt1120/archive/2007/09/08/1777004.aspx
#include <string>
#include <iostream>
using namespace std;
void main()
{
string str1("hello world!");
string str2 = str1;
printf ("Before Copy-On-Write:\n");
printf ("str1's address: %x\n", str1.c_str());
printf ("str2's address: %x\n", str2.c_str());
str1[1] = 'q';
str2[2] = 'g';
string str3 = str2;
printf ("\nAfter Copy-On-Write:\n");
printf ("str1's address: %x\n", str1.c_str());
printf ("str2's address: %x\n", str2.c_str());
printf ("str3's address: %x\n", str3.c_str());
}
有个疑惑想请教:对于str3,我觉得应该是和str2共用一段内存空间,即打印出的地址应该相同。
但是结果却不同?
...全文
相关推荐
标准C++类string的Copy-On-Write技术
标准C++类std::string采用了Copy-On-Write (写时复制) 技术,这是一种在编程中广泛应用的优化策略,旨在减少不必要的内存消耗和提高性能。该技术源自现实生活中的“拖延战术”,即推
STL 的string类怎么啦
Copy-On-Write(COW)技术是另一个为了效率而引入的设计,它允许多个string对象共享同一块内存,直到其中一个对象需要修改时才进行复制。
深入体会Ruby的String类型有哪些强项
在连接字符串之前和之后,我们可以检查 `RSTRING(str)->aux.shared` 的值来观察 copy-on-write 的发生。
C++ string类用法实例[源码]
例如,在vs中,string类可能使用固定大小的缓冲区来存储字符串,而在g++中则可能采用写时拷贝(copy-on-write)机制以减少不必要的内存分配。这些差异影响到string对象的行为和性能。
quickzhao-String操作优化技巧
”(copy-on-write)。


