首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux m地图调用使用经验

2013-01-28 
Linux mmap调用使用经验Linux的mmap系统调用(libc封装了同名函数)可以分配一段匿名的虚拟内存区域,也可以

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自动选择其他可用区域(返回的地址不等于指定的地址);
如果使用了MAP_FIXED标志,则会强制使用这段内存,如果已经占用了就先释放、再重新创建。
可以看到强制占用这段内存区域之后,原有的内存被释放了:
VmSize:    14556 kB
VmRSS:       532 kB
因为是先释放原有的5MB虚拟内存和物理内存,再创建10MB虚拟内存,但没有分配物理内存。所以增加了5MB虚拟内存,但是减少了5MB物理内存。

热点排行