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 中的对齐方式。