Go语言之unsafe包
一 介绍
unsafe 包含有关于Go程序类型安全的所有操作
unsafe 库让 go 可以像C语言一样操作计算机内存,但这并不是go推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了go的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护
unsafe有两个类型,三个函数
//ArbitraryType 是int类型
//uintptr是整型,可以足够保存指针的值得范围,在32平台下为4字节,在64位平台下是8字节
type ArbitraryType int
type Pointer *ArbitraryType
func Sizeof(x ArbitraryType) uintptr
func Offsetof(x ArbitraryType) uintptr
func Alignof(x ArbitraryType) uintptr
二 两个类型
type ArbitraryType int
type Pointer *ArbitraryType
//golang的指针类型长度与int类型长度,在内存中占用的字节数是一样的
ArbitraryType是int的一个别名,在Go中对ArbitraryType赋予特殊的意义。代表一个任意Go表达式类型。
Pointer 是int指针类型的一个别名,在Go中可以把Pointer类型,理解成任何指针的父类型
三个函数
3.1 Sizeof
func Sizeof(v ArbitraryType) uintptr
Sizeof 返回被值 v 所占用的字节大小。
该大小只是最“顶级”的值。例如,若 v 是一个切片,它会返回该切片描述符的大小,
而非该切片引用的内存大小
1
2
3.2 Alignof
func Alignof(v ArbitraryType) uintptr
Alignof 返回 v 值的对齐方式。 其返回值 m 满足变量 v 的类型地址与 m 取模为 0 的最大值。若 v 是 structValue.field 的形式,它会返回字段 f 在其相应结构对象 obj 中的对齐方式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)