Golang怎么用unsafe获取结构体大小_Golang如何用Sizeof查看类型占用的字节数【方法】

张开发
2026/4/8 3:23:59 15 分钟阅读

分享文章

Golang怎么用unsafe获取结构体大小_Golang如何用Sizeof查看类型占用的字节数【方法】
unsafe.Sizeof 返回结构体类型在编译期的固定内存大小不含动态分配内存受字段对齐和平台架构影响不随实例值变化。unsafe.Sizeof 不能直接获取结构体实例的运行时大小很多人以为 unsafe.Sizeof 能像 len 那样“看一眼变量就知道占多少字节”其实它只接受类型或类型推导出的值且在编译期就确定结果跟字段实际赋了什么值完全无关。比如一个含 []int 字段的结构体unsafe.Sizeof 返回的只是指针长度容量三个字段的固定开销24 字节不包括底层数组分配的内存。常见错误现象— 对结构体变量直接调用 unsafe.Sizeof(s) 却发现结果恒定和字段内容变化无关— 误以为能靠它估算 GC 压力或序列化体积正确用法传类型字面量如 unsafe.Sizeof(struct{}{}) 或 unsafe.Sizeof(MyStruct{})若想看字段对齐后的总大小必须用空结构体实例不能传指针unsafe.Sizeof(s) 返回的是指针大小注意结果不含任何动态分配内存如 map、slice 底层数组、string 数据区结构体字段对齐会让 Sizeof 结果“比预期大”Go 编译器会按字段类型自然对齐边界如 int64 对齐到 8 字节自动插入填充字节。这就导致两个字段顺序不同、但类型相同的结构体unsafe.Sizeof 结果可能不一样。使用场景优化高频小对象内存布局或调试 cgo 交互时的 struct 内存映射是否匹配 C 头文件立即学习“go语言免费学习笔记深入” Mokker AI AI产品图添加背景

更多文章