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

posted @ 2022-12-04 16:04  不会钓鱼的猫  阅读(61)  评论(0编辑  收藏  举报