字符串数据在内存中的位置

我读到字符串是不可变的,内部字符串有两个数据,第一个是指针,第二个是指向数据的长度。

s := "Hello World"

这意味着 s 有两个字节的字符串数据指针,长度为 11,如果我们更改此数据

s = "This is golang"

那么s将包含不同的指针和长度,但如果 s 指向的字符串的这些字节存储在堆栈或堆中,我没有得到?

此外,我们可以从文件中获取字符串并将其分配给s变量,这意味着在编译时编译器不知道要存储的字节数,所以会堆入吗?


慕婉清6462132
浏览 108回答 2
2回答

肥皂起泡泡

字符串文字存储在数据段中。他们无法改变。在运行时动态创建的字符串存储在堆栈或堆中,具体取决于字符串的分配/使用方式。如果一个字符串在一个函数中使用并且不存在于该函数之外,它很可能会在堆栈上。否则它将在堆中。

呼啦一阵风

String创建后为 const 。如果你重新分配一个String var,编译器只是创建另一个const String,放弃前一个,前一个将等待GC。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go