1 Star 0 Fork 0

秋来冬风 / gtl

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
virtual-memory_uinx.go 1.19 KB
一键复制 编辑 原始数据 按行查看 历史
秋来冬风 提交于 2023-01-02 12:14 . 秋来冬风:gofmt
//go:build !windows
// +build !windows
package sys
import (
"syscall"
"unsafe"
)
// 指定虚拟内存操作的结构体
type Virtual_memory struct {
addr uintptr
length uintptr
}
// 指定虚拟内存操作的结构体别名
type VM = Virtual_memory
// 创建指定虚拟内存操作的结构体
func NewVM(addr, length uintptr) VM {
return VM{
addr: addr,
length: length,
}
}
func mtob(addr, length uintptr) []byte {
var a []byte
p := (*[3]uintptr)(unsafe.Pointer(&a))
p[0] = addr
p[1] = length
p[2] = length
return a
}
// 锁定指定虚拟内存操作,有错panic
func (v VM) Lock() {
pslice := mtob(v.addr, v.length)
err := syscall.Mlock(pslice)
if err != nil {
panic(err)
}
}
// 锁定指定虚拟内存操作,有错返回error
func (v VM) Lockerr() error {
pslice := mtob(v.addr, v.length)
err := syscall.Mlock(pslice)
return err
}
// 解锁指定虚拟内存操作,有错panic
func (v VM) Unlock() {
pslice := mtob(v.addr, v.length)
err := syscall.Munlock(pslice)
if err != nil {
panic(err)
}
}
// 解锁指定虚拟内存操作,有错error
func (v VM) Unlockerr() error {
pslice := mtob(v.addr, v.length)
err := syscall.Munlock(pslice)
return err
}
Go
1
https://gitee.com/qiulaidongfeng/gtl.git
git@gitee.com:qiulaidongfeng/gtl.git
qiulaidongfeng
gtl
gtl
986f64fec44d

搜索帮助