Go SDK/src/runtime/string.go
type stringStruct struct {
str unsafe.Pointer // 字符串在常量区的首地址
len int // 字符串长度
}
特性
- 一个string类型不管其字符串长度为多少,它在虚拟内存中的大小都是一致的;
- 在64位系统中占16个字节
- unsafe.Pointer类型底层为int类型,64位系统中占8字节
- int类型在64位系统中会编译为int64类型,占8字节
- 在32位系统中占8字节
- unsafe.Pointer类型底层为int类型,32位系统中占4字节
- int类型在32位系统中会编译为int32类型,占4字节
- 在64位系统中占16个字节
- string类型中的指针指向常量区,即字符串的值存储在常量区;
- 常量区中的内容是只读的,不可修改;
- 两个相同的字符串的内存地址相同,即两个string类型中的指针指向同一块常量区;
存储结构
string与[]byte的区别
- string和[]byte的存储结构不同;
- string:指针+字符串长度;
- []byte:指针+长度+容量;
- []byte的值在虚拟内存区存储,可修改;
- string的值在字符串常量区内存储,不可修改;