Linux mmap调用使用经验
Linux的mmap系统调用(libc封装了同名函数)可以分配一段匿名的虚拟内存区域,也可以映射一个文件到内存。下面讨论匿名映射。
写一个简单的测试程序(见附件),启动时显示程序的虚拟内存和物理内存:
VmSize: 4300 kB
VmRSS: 356 kB
分配虚拟内存区域
下面代码是分配10MB的虚拟内存区域:
buffer = (char*) mmap(buffer, bufferlen, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_FIXED, -1, 0);
前两个参数指定虚拟内存区域[buffer, buffer + bufferlen),但这个区域在前面已经分配了,而且没有完全释放(只释放了一半),怎么处理这种情况呢?
如果第4个参数没有MAP_FIXED标志,则mmap自动选择其他可用区域(返回的地址不等于指定的地址);