当我使用 make 或 new 调用创建新切片或结构时:
s := make([]int64, 10, 100)
o := new(MyStruct)
Go 使用内存分配系统调用分配多少内存?它是否预先分配内存,以便后续调用不会触发新的系统调用?
我问这个是因为我需要在我的代码中经常分配内存。我不确定我是否需要自己实现一个内存分配器,或者我是否可以依靠 Go 来做脏活。如果 Go 确实预先分配了内存,我可以自定义分配的块大小吗?
我用Go写了一些实验代码,并在strace下运行代码,但是我不明白Go对mmap系统调用做了什么:
mmap(0xc000000000, 65536, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
munmap(0xc000000000, 65536) = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd1017000
mmap(0xc208000000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc208000000
mmap(0xc207ff0000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc207ff0000
mmap(0xc000000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd1007000
mmap(NULL, 1439992, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd0ea7000
墨色风雨
相关分类