blog icon indicating copy to clipboard operation
blog copied to clipboard

Go Mmap 文件内存映射简明教程 | 快速入门 | 极客兔兔

Open geektutu opened this issue 4 years ago • 3 comments

https://geektutu.com/post/quick-go-mmap.html

简单理解,mmap 是一种将文件/设备映射到内存的方法,实现文件的磁盘地址和进程虚拟地址空间中的一段虚拟地址的一一映射关系。也就是说,可以在某个进程中通过操作这一段映射的内存,实现对文件的读写等操作。修改了这一段内存的内容,文件对应位置的内容也会同步修改,而读取这一段内存的内容,相当于读取文件对应位置的内容。

geektutu avatar Apr 21 '20 02:04 geektutu

感谢您的教程。

func (demo *Demo) mmap() {
	b, err := syscall.Mmap(int(demo.file.Fd()), 0, defaultMemMapSize, syscall.PROT_WRITE|syscall.PROT_READ, syscall.MAP_SHARED)
	_assert(err == nil, "failed to mmap", err)
	demo.dataRef = b
	demo.data = (*[defaultMaxFileSize]byte)(unsafe.Pointer(&b[0]))
}

大佬可不可以讲下dataref的作用?

bxclib2 avatar Oct 25 '20 16:10 bxclib2

文中有提到,dataRef 保留地址,用于后续取消映射。syscall.Munmap(demo.dataRef)。

geektutu avatar Oct 26 '20 00:10 geektutu

兔兔太强了

acechef avatar Jul 08 '22 08:07 acechef