C++ std::string是否使用字符串插入?
我对windows特别感兴趣,明哥 谢谢 更新: 首先,我认为每个人都熟悉弦乐实习。 第二,我的问题很详细: 我上了一堂弦乐课练习。没什么奇怪的,我只是把大小和字符*存储在一个类中 我用memcpy做作业 当我这样做来测量std::string和我的string类的赋值速度时:C++ std::string是否使用字符串插入?,c++,C++,我对windows特别感兴趣,明哥 谢谢 更新: 首先,我认为每个人都熟悉弦乐实习。 第二,我的问题很详细: 我上了一堂弦乐课练习。没什么奇怪的,我只是把大小和字符*存储在一个类中 我用memcpy做作业 当我这样做来测量std::string和我的string类的赋值速度时: string test1 = " 65 kb text ", test2; for(int i=0; i<1000000; i++) { test2 = test1; } mystring
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
}
stringtest1=“65kb文本”,test2;
对于(int i=0;i不,STL中没有字符串的插入。它不适合C++设计哲学,具有这样的特性。 < P>不,STL中没有字符串的插入。它不适合C++设计哲学,具有这样的特性。简单地说,不可以使用可变字符串,例如所有的STD::String对象来进行字符串交互。
简单地说,不。对于可变字符串,例如所有std::String对象,字符串内部不可行。不太可行,因为std::String
是可修改的
已知实现尝试使用写时复制,但这在多线程代码中会导致这样的问题,我认为这已经过时。正确实现也非常困难-也许不可能?如果有人获取字符串中某个字符的指针,然后修改另一个字符,我不确定这是否是permi不允许使第一个指针无效。如果不允许,那么COW也不可能,我想,但我不记得它是如何工作的。不太可能,因为std::string
是可修改的
已知实现尝试使用写时复制,但这在多线程代码中会导致这样的问题,我认为这已经过时。正确实现也非常困难-也许不可能?如果有人获取字符串中某个字符的指针,然后修改另一个字符,我不确定这是否是permi无法使第一个指针无效。如果不允许,那么COW也不可能,我想,但我不记得它是如何工作的。编译器可能只对代码中出现的字符串文本进行字符串内部处理。如果使用字符串文本初始化std:strings,并且某些文本多次出现,则mpiler只能将此字符串的一个副本存储在二进制文件中。在运行时没有字符串内部存储。mingw支持编译时字符串内部存储,如前所述。编译器只能对代码中出现的字符串文本进行字符串内部存储。如果初始化std:strings时使用字符串文本以及一些文本多次出现,编译器可能只在二进制文件中存储此字符串的一个副本。在运行时没有字符串内部存储。如前所述,mingw支持编译时字符串内部存储。两个想法:
myclass
是一个模板类吗?std::string
类是模板类basic\u string
的类型定义。这意味着编译测试函数时,编译器可以访问basic\u string的完整源代码,而不仅仅是头。此附加信息可以在交换更高的编译时间
>P>大多数C++标准库实现都是高度优化的(而且几乎可读性差)。
两个想法:
myclass
是一个模板类吗?std::string
类是模板类basic\u string
的类型定义。这意味着编译测试函数时,编译器可以访问basic\u string的完整源代码,而不仅仅是头。此附加信息可以在交换更高的编译时间
>P>大多数C++标准库实现都是高度优化的(而且几乎可读性差)。
鉴于您已经选择了一个“非真实问题”投票,我认为您必须解释什么是“字符串内部处理”。或者我会解释-这是一个对字符串的操作,返回所谓的“规范”字符串的表示形式,其属性为&x==&y当且仅当x==y。换句话说,对于每个可能的字符串值,最多有一个“插入字符串”具有该值的对象。这种性能差异可以用写时复制来解释。但是写时复制在多线程方面有问题。@CodeInChaos我想是的。std::string one不能再快了,因为它也必须复制数据,不是吗?有什么比memcpy更快呢?有可能
stD::在你的实现中,String Test2= Test1替换它,但同样的优化不会赶上你的类。它快多少?@迈克:如果你认为C++是漂亮的,你还有很多东西要学。考虑到你已经得到了一个“不是真正的问题”的投票,我想你必须解释什么是“字符串内部处理”。或者我会的——这是一个对字符串的操作,返回所谓的“规范”字符串的表示形式,其属性为&x==&y当且仅当x==y。换句话说,对于每个可能的字符串值,最多有一个“插入字符串”具有该值的对象。这种性能差异可以用写时复制来解释。但是写时复制在多线程方面有问题。@CodeInChaos我想是的。std::string one不能再快了,因为它也必须复制数据,不是吗?有什么比memcpy更快呢?有可能stD::在你的实现中,String Test2= Test1替换它,但同样的优化不会赶上你的类。它快多少?@迈克:如果你认为C++是漂亮的,那么你还有很多要做的事情。