具体可以参考b站的幼麟实验室,很硬核
type P struct {
a bool
b int32
c int8
d int64
e byte
}
var p P
fmt.Printf("%v\n", unsafe.Sizeof(p)
成员变量对齐方式为:
min(8, 1) = 1,由于是第一个成员,偏移量为0即可,此时内存占位为:a
min(8, 4) = 4,偏移量为4即可,此时内存占位为:axxx | bbbb
min(8, 1) = 1,偏移量为8即可,此时内存占位为:axxx | bbbb | c
min(8, 8) = 8,内存已经占有9位,大于9且是8的整数倍只有16,此时内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd
min(8, 1) = 1,直接加入后一个位置,此时内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd | e
结构体整体对齐:
此时结构体占有25个字节,并且max(8, 8) = 8,那么必须要扩展成32个字节才满足对齐要求,
故最终内存占位为:axxx | bbbb | cxxx | xxxx | dddd | dddd | exxx | xxxx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现