使用到两个函数mmap:用于分配内存;munmap:用于释放内存。
mmap的原型如下:
void *mmap(
void *start, //指定映射的虚拟地址 0由系统指定开始位置
size_t length, //映射空间大小 pagesize倍数
int prot, //映射权限 PROT_NONE | PROT_READ PROT_WRITE PROT_EXEC
int flags, //映射方式
int fd, //文件描述符号
offset_t off //文件中的映射开始位置(必须是pagesize的倍数)
);
关于映射方式,分为内存映射和文件映射。
内存映射:MAP_ANONYMOUS
文件映射:MAP_SHARED MAP_PRIVATE(二选一)
只有在文件映射的时候,最后两个参数(fd和off)才有用。
例子:
#include <stdio.h>
#include
<stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
main(){
int
*p=mmap(NULL,getpagesize(),PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_SHARED,
0
,
0
);
*p=
20
;
*(p+
1
)=
30
;
*(p+
2
)=
40
;
printf(
"
%d
"
,p[
2
]);
//
输出40
munmap(p,
4096
);
//
释放4K的内存
}
关于内存管理的选择,有如下几种:智能指针、STL、new、malloc、brk/sbrk、mmap/munmap。
malloc:适用于小而多数据
brk/sbrk:同类型的大块数据,动态移动指针
mmap/munmap:控制内存访问/使用文件映射/控制内存共享

