C++ 在C+;中更改字符串的值时会发生什么+; #包括 #包括 使用名称空间std; int main(){ string str=“Hello”; str=“你好,世界”; cout
Re: “字符串如何处理内存 自动的C++ 在C+;中更改字符串的值时会发生什么+; #包括 #包括 使用名称空间std; int main(){ string str=“Hello”; str=“你好,世界”; cout,c++,C++,Re: “字符串如何处理内存 自动的 这意味着,除其他外,没有办法提供一个std::string,一个外部创建的缓冲区。因此它有点低效。好的一面是swap对std::string的要求(与std::vector相反)这意味着它可以使用小缓冲区优化,其中存储短字符串而无需动态分配,这有助于提高效率。std::string将自动将字符串复制到自己的内存中。std::string可能会清除其旧内容并将新字符串复制到内存中(如果需要,它将扩展用于存储字符串的内存存储)您应该获取一些并读取它们。@WhiZ
这意味着,除其他外,没有办法提供一个
std::string
,一个外部创建的缓冲区。因此它有点低效。好的一面是swap
对std::string
的要求(与std::vector
相反)这意味着它可以使用小缓冲区优化,其中存储短字符串而无需动态分配,这有助于提高效率。std::string
将自动将字符串复制到自己的内存中。std::string
可能会清除其旧内容并将新字符串复制到内存中(如果需要,它将扩展用于存储字符串的内存存储)您应该获取一些并读取它们。@WhiZTiM它将如何在不更改地址的情况下执行此操作。@间谍:缓冲区地址,例如&s[0]
,当字符串
实例重新分配其内部缓冲区时发生更改。@Cheersandhth.-Alf谢谢,我想我理解了,但还有一件事我不确定,main()的内存堆栈将发生什么更改
函数来实现这一点。你能给我们一个内存堆栈的视图吗。@间谍:我认为“内存堆栈”的意思是“内存布局”。没有太多。使用小缓冲区优化(非常短)字符串通常直接存储在std::string
实例中。否则,该实例会在其他位置保存指向动态分配缓冲区的指针。非常短的字符串的长度可能是多少?尽可能适合一个或两个指针值。对于32位编译器,这并不多,比如7个字符左右。对于64位com比勒,可能是两倍。
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "Hello";
str = "Hello World";
cout<<str<<endl;
}