gpt4 book ai didi

c++ - std::string 是否使用字符串实习?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:20 25 4
gpt4 key购买 nike

我对 Windows 特别感兴趣,mingw。

谢谢。

更新:首先,我认为每个人都熟悉字符串实习。 http://en.wikipedia.org/wiki/String_interning

其次,我的问题很详细:我敲了一个弦乐课来练习。没什么特别的,你知道,我只是将大小和一个 char * 存储在一个类中。

我使用 memcpy 进行分配。

当我这样做来测量 std::string 和我的字符串类的分配速度时:

string test1 = "  65 kb text ", test2;
for(int i=0; i<1000000; i++)
{
test2 = test1;
}

mystring test3 = "65 kb text", test4;
for (int i=0; i<1000000; i++)
{
test4 = test3
}

std::string 是一个很大的赢家。我不在赋值运算符(在我的类(class))中做任何事情,而是使用 memcpy 进行复制。我什至不使用“new”运算符创建新数​​组,因为我检查大小是否相等,并且只在需要时请求 new。怎么会?

对于小字符串,没有问题。我看不出 std::string 怎么能比 memcpy 更快地赋值,我打赌它也在后台或类似的东西中使用它,所以这就是我问实习生的原因。

更新2:通过使用这样的单个字符分配修改循环:test2[15] = 78,我避免了 std::string 的写时复制的影响。现在两个代码花费的时间完全相同(好吧,有 1-2% 的差异,但可以忽略不计)。因此,如果我没有完全弄错的话,mingw std::string 必须使用 COW。

谢谢大家的帮助。

最佳答案

简单地说,没有。对于可变字符串,例如所有 std::string-objects,字符串实习是不可行的。

关于c++ - std::string 是否使用字符串实习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com