使用到两个函数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:控制内存访问/使用文件映射/控制内存共享

