【学习打卡】第8天 深入Go底层原理,重写Redis中间件实战 第4章
2022/8/10 4:22:47
本文主要是介绍【学习打卡】第8天 深入Go底层原理,重写Redis中间件实战 第4章,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称:深入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,起始地址指向父结构体的起始地址
这篇关于【学习打卡】第8天 深入Go底层原理,重写Redis中间件实战 第4章的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识