课程名称:深入Go底层原理,重写Redis中间件实战
课程章节:什么变量的大小是 0 字节
主讲老师:Moody
课程内容:
今天学习的内容包括:
基本类型的字节数
空结构体
课程收获:
基本类型的字节数
- int 大小跟随系统字长,64位系统是8个字节(即64位)
- 指针的大小也是系统字长,64位系统是8个字节(即64位)
空结构体
- 空结构体的地址均相同(不被包含在其他结构体中时)
- 空结构体主要是为了节约内存,比如:
- 新建一个只用于控制阻塞的chan,make(chan struct{}),这样可以不浪费任何内存。
- 新建一个只有键的map,用来快速判断键是否存在,make(map[string]struct{})。
type People struct {
}
type Student struct {
People
age int
}
func main() {
i := 100
fmt.Printf("%d %p\n", unsafe.Sizeof(i), &i)
a := People{}
fmt.Printf("%d %p\n", unsafe.Sizeof(a), &a)
c := Student{}
fmt.Printf("%d %p\n", unsafe.Sizeof(c), &c)
fmt.Printf("%d %p\n", unsafe.Sizeof(c.People), &c.People)
}
输出结果:
8 0xc000014078
0 0x547438 # 空结构体的内存长度为0,起始地址指向zerobase(runtime中定义的零地址)
8 0xc000014098
0 0xc000014098 # 子空结构体内存长度为0,起始地址指向父结构体的起始地址
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學(xué)習,寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦