Go语言中无需初始化结构体变量获取其内存占用大小的方法
Go中获取未初始化大型结构体的内存占用大小
你可以通过两种无初始化开销的方式实现,完全避开需要实例化结构体变量的限制:
使用
unsafe.Sizeof配合结构体零值字面量:
直接编写unsafe.Sizeof(MyStruct{})。Go编译器会在编译阶段直接计算出该结构体的内存大小,将代码替换为常量值,不会在运行时实际创建任何结构体实例,完全没有初始化开销。使用反射包通过nil指针获取类型尺寸:
代码示例:reflect.TypeOf((*MyStruct)(nil)).Elem().Size()。这里通过nil指针获取结构体的类型元信息,不会分配任何结构体内存;且Go运行时会缓存类型信息,多次调用也不会产生额外开销。
这两种方式都能达到类似C语言sizeof的编译时/低开销效果,完全不需要初始化结构体变量。
内容的提问来源于stack exchange,提问作者Nitin Kumar
相关产品推荐
相关产品推荐

