zoukankan      html  css  js  c++  java
  • Linux学习笔记6——映射虚拟内存

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

  • 相关阅读:
    玩转车联网1---初识OBD和行车助手
    Confluence DotNet API发布
    深入理解最强桌面地图控件GMAP.NET ---[更新]百度地图
    猜想豌豆夹,360手机助手,腾讯手机管家,小米盒子传屏等工具开发思路
    有用文章搜藏
    Hbase Region Server整体架构
    无密码ssh操作步骤备忘
    cgwin的ssh错误解决办法
    Java系列笔记(1)
    SQL四种语言:DDL,DML,DCL,TCL
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3463956.html
Copyright © 2011-2022 走看看