Justin-刘清政的博客

Go语言之unsafe包

2019-03-10

一 介绍

unsafe 包含有关于Go程序类型安全的所有操作

unsafe 库让 go 可以像C语言一样操作计算机内存,但这并不是go推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了go的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护

unsafe有两个类型,三个函数

1
2
3
4
5
6
7
//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

二 两个类型

1
2
3
4
5
6
type ArbitraryType int   

type Pointer *ArbitraryType

//golang的指针类型长度与int类型长度,在内存中占用的字节数是一样的
//

ArbitraryType是int的一个别名,在Go中对ArbitraryType赋予特殊的意义。代表一个任意Go表达式类型。

Pointer 是int指针类型的一个别名,在Go中可以把Pointer类型,理解成任何指针的父类型

三个函数

3.1 Sizeof

1
func Sizeof(v ArbitraryType) uintptr

Sizeof 返回被值 v 所占用的字节大小。
该大小只是最“顶级”的值。例如,若 v 是一个切片,它会返回该切片描述符的大小,
而非该切片引用的内存大小

1
2


3.2 Alignof

1
func Alignof(v ArbitraryType) uintptr

Alignof 返回 v 值的对齐方式。 其返回值 m 满足变量 v 的类型地址与 m 取模为 0 的最大值。若 v 是 structValue.field 的形式,它会返回字段 f 在其相应结构对象 obj 中的对齐方式。

Tags: Go
使用支付宝打赏
使用微信打赏

点击上方按钮,请我喝杯咖啡!

扫描二维码,分享此文章