登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-21 20:03:34 415浏览 收藏

从现在开始,努力学习吧!本文《字符串数据在内存中的位置》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

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

s := "hello world"

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

s = "This is golang"

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

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


解决方案


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

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

String 在创建后是 const。如果你重新分配一个String var,编译器只是创建另一个const String,放弃前一个,前一个将等待GC。

今天关于《字符串数据在内存中的位置》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>