字符串数据进入内存的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串数据进入内存的位置相关的知识,希望对你有一定的参考价值。

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

s := "Hello World"

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

s = "This is golang"

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

因为我们可以从文件中获取字符串并将其分配给s变量,这意味着在编译时编译器不知道字节数据的数量,因此它将是堆吗?

答案

字符串文字存储在数据段中。它们无法更改。

在运行时动态创建的字符串存储在堆栈或堆中,具体取决于字符串的分配/使用方式。如果在函数中使用了一个字符串,并且该字符串没有超出该函数的寿命,则很可能会将其放在堆栈中。否则它将在堆中。

另一答案

String是创建后的常量。如果您重新分配一个String var,则编译器将创建另一个const String,放弃前一个const String,前一个将等待GC。

以上是关于字符串数据进入内存的位置的主要内容,如果未能解决你的问题,请参考以下文章

字符型数据在内存中是以啥形式存放的

Android 使用两个不同的代码片段获取当前位置 NULL

根据字符串名称而不是列表视图项位置替换片段并启动活动

变量的内存分析图

关于C语言编译文件在内存中的位置

如何删除片段布局中的任何位置单击该单击的主活动按钮