【学习打卡】第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-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧