Go 字符串变量的显示大小似乎不真实

请看例子:http : //play.golang.org/p/6d4uX15EOQ


package main


import (

    "fmt"

    "reflect"

    "unsafe"

)


func main() {

    c := "foofoofoofoofoofofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo"

    fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c))

    fmt.Printf("c: %T, %d\n", c, reflect.TypeOf(c).Size())

}

输出:


c: string, 8 //8 bytes?!

c: string, 8

这么大的字符串好像不能有这么小的尺寸!怎么了?


守着一只汪
浏览 216回答 0
0回答

千万里不及你

包裹不安全导入“不安全”函数大小func Sizeof(v ArbitraryType) uintptrSizeof 返回值 v 占用的字节大小。该大小仅是值的“顶级”的大小。例如,如果 v 是一个切片,它返回切片描述符的大小,而不是切片引用的内存大小。Go 编程语言规范长度和容量len(s)    string type      string length in bytes您正在查看“顶级”、string描述符、指向底层字符串值的指针和长度。使用该len函数获取基础字符串值的长度(以字节为单位)。从概念上和实际上,字符串描述符是一个struct包含指针和长度的字符串,其长度(32 位或 64 位)取决于实现。例如,package mainimport (    "fmt"    "unsafe")type stringDescriptor struct {    str *byte    len int}func main() {    fmt.Println("string descriptor size in bytes:", unsafe.Sizeof(stringDescriptor{}))}输出(64 位):字符串描述符大小(以字节为单位):16输出(32 位):字符串描述符大小(以字节为单位):8
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go