You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中别名类型与嵌入类型的内存占用差异疑问

Go语言中两种字符串相关类型的内存占用差异

核心结论

这两种类型的内存占用存在本质区别,且你对String2的内存结构理解有误。

1. 别名类型String1

type String1 string属于Go的类型定义(和类型别名type String1 = string的内存结构完全一致),它本质上和原生string是等价的内存结构:

  • 在64位系统中,每个String1值占用16字节,由两部分组成:
    • 8字节的指针,指向底层UTF-8字节数组的起始地址
    • 8字节的整数,存储字符串的长度
  • 不存在额外的指针层级,String1本身就是和string相同的结构,两者互相转换没有内存开销。

2. 嵌入类型String2

type String2 struct { string }是嵌入了string的结构体,它的内存布局是将string的字段直接平铺到结构体中:

  • 在64位系统中,String2同样占用16字节,结构为「指针(8字节) + 长度(8字节)」,不存在你所说的“指向string的指针”。Go的结构体嵌入是字段的直接包含,不会额外增加指针层级。
  • 虽然内存占用和string、String1相同,但String2是全新的结构体类型,无法直接与string或String1互相转换,必须显式访问嵌入的string字段(如myString2.string)。

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:19:53