映射虚拟内存

没有任何额外维护数据的内存分配
mmap(分配)/munmap(释放)
分配空间大小:
      4k*(length/4k+1)
      以页为单位,每页通常为4K

函数说明:

		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(二选一)

举例:

#include 
#include 
#include 
#include 
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\n",p[2]);
    unmap(p,4096);//将申请的内存释放掉,即使释放1也会释放4K
}

你可能感兴趣的:(Linux)