当前位置: > > > > 字符串数据在内存中的位置
来源:stackoverflow
2024-04-21 20:03:34
0浏览
收藏
从现在开始,努力学习吧!本文《字符串数据在内存中的位置》主要讲解了等等相关知识点,我会在中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!
问题内容
我读到字符串是不可变的,字符串内部有两个数据,第一个是指针,第二个是指向数据的长度。
s := "hello world"
这意味着 s 有两个字符串字节数据指针,长度为 11,如果我们更改此数据
s = "This is golang"
那么 s
将包含不同的指针和长度,但我没有得到 s 指向的这些字符串字节是否存储在堆栈或堆中?
此外,我们可以从文件中获取字符串并将其分配给 s
变量,这意味着在编译时编译器不知道要存储的字节数,因此会在堆中吗?
解决方案
字符串文字存储在数据段中。他们无法改变。
在运行时动态创建的字符串存储在堆栈或堆中,具体取决于字符串的分配/使用方式。如果一个字符串在函数内使用并且不存在于该函数之外,则它很可能会在堆栈上。否则它将在堆中。
String
在创建后是 const。如果你重新分配一个String var,编译器只是创建另一个const String,放弃前一个,前一个将等待GC。
今天关于《字符串数据在内存中的位置》的内容介绍就到此结束,如果有什么疑问或者建议,可以在公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!