字符串数据进入内存的位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串数据进入内存的位置相关的知识,希望对你有一定的参考价值。
我读到字符串是不可变的,并且字符串内部有两个数据,第一个是指针,第二个是指针数据的长度。
s := "Hello World"
这意味着s有两个字符串字节的数据指针,并且长度为11,如果我们更改此数据,则为该参数
s = "This is golang"
然后s
将包含不同的指针和长度,但我没有得到s指向的这些字符串字节存储在堆栈或堆中。
因为我们可以从文件中获取字符串并将其分配给s变量,这意味着在编译时编译器不知道字节数据的数量,因此它将是堆吗?
答案
字符串文字存储在数据段中。它们无法更改。
在运行时动态创建的字符串存储在堆栈或堆中,具体取决于字符串的分配/使用方式。如果在函数中使用了一个字符串,并且该字符串没有超出该函数的寿命,则很可能会将其放在堆栈中。否则它将在堆中。
另一答案
String
是创建后的常量。如果您重新分配一个String var,则编译器将创建另一个const String,放弃前一个const String,前一个将等待GC。
以上是关于字符串数据进入内存的位置的主要内容,如果未能解决你的问题,请参考以下文章