syscall.Mmap() 调用采用 int 类型的长度参数,该参数仅适用于 2GB。那我该如何映射一个更大的文件呢?
注意:64位系统,所以地址空间不是问题。
在http://golang.org/src/pkg/syscall/syscall_unix.go中查看mmapper 上的 Mmap 方法。您应该能够复制该代码并根据需要对其进行调整。
当然,您将无法映射到 []byte,因为切片长度被定义为“int”(目前到处都是 32 位)。您可以将mmap 映射到更大的元素类型(例如[]int32),或者只是使用指向内存的指针,但它不会替代syscall.Mmap。