mmap() 和 munmap() - Unix的系统函数,更贴近底层

void* mmap(void* addr,size_t size,int prot,int flags,
int fd, off_t offset)

参数addr可以指定映射的首地址,一般为0 交给内核指定。

size 就是分配内存的大小,映射时以 页 为单位。

prot是分配内存的权限,一般用PROT_READ|PROT_WRITE   

  flags是标识,通常包括以下三个:

         MAP_SHARED   MAP_PRIVATE : 二选一 ,指明映射的内存是否共享,MAP_SHARED只对 映射文件有效。

         MAP_ANONYMOUS : 映射物理内存,默认映射文件。

fd是文件描述符,在映射文件时有用。

offset是文件的偏移量,指定 映射文件时从哪里开始。

映射物理内存时,fd和offset 给 0 即可。

返回  成功返回首地址,失败返回 MAP_FAILED==(void*)-1

//mmap.c
#include <stdio.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <string.h> int main()
{
/*映射一片内存*/
void* p = mmap(0,//让系统指定映射内存的首地址(虚拟地址)
4,//映射4bytes的空间,其实会映射一页内存
PROT_READ|PROT_WRITE,//权限,有读写权限
MAP_PRIVATE|MAP_ANONYMOUS,/*MAP_ANONYMOUS:匿名映射,当映射到内存时,只能使用匿名映射。MAP_SHARED和MAP_PRIVATE必选其一。*/
0,//文件描述符,用于映射到文件,内存映射中会忽略
0);//文件偏移量,用于文件,内存映射也会忽略
if(p==MAP_FAILED){
perror("映射失败");
exit(-1);
}
int* pi = p+500;
int i;
for(i=10; i<60; i++){
pi[i] = i;
}
strcpy(p+750, "ABCDEFGHIJKLMN");
char* pc = p;
for(i=0; i<800; i++){
if(i%10==0)printf("\n");
printf("%x ", pc[i]);
}
printf("p=%p\n", p);
sleep(20);
munmap(p, 4);
// while(1);
}

mmap()与munmap()的小例子的更多相关文章

  1. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  2. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  3. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

  4. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...

  5. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  6. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  7. 【zTree】 zTree使用的 小例子

    使用zTree树不是第一次了  但是 还是翻阅着之前做的 对照着 使用起来比较方便  这里就把小例子列出来   总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先  在 ...

  8. js小例子(标签页)

    运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...

  9. sbrk与brk的使用小例子

    sbrk() 和 brk() - Unix的系统函数   sbrk()和brk() 系统的底层会维护一个位置,通过位置的移动完成内存的分配和回收.映射内存时 以一个内存页作为基本单位.   void* ...

随机推荐

  1. chomre常用快捷键

    Ctrl+T                                打开新标签页. 按住 Ctrl 键的同时点击链接.或用鼠标中键(或鼠标滚轮)点击链接.    从后台在新标签页中打开链接. ...

  2. 【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法

    今天分析一下duplicate symbols for architecture x86_64错误  也是困扰我一段时间   不过很幸运 在半个小时内找到了解决方案 百度上对于duplicate sy ...

  3. ultraedit正则使用

    下面是从UltraEdit文档中摘录的语法说明: 正则表达式 (UltraEdit 语法): 符号 功能 % 匹配行首 – 表示搜索字符串必须在行首,但不包括任何选定的结果字符中的行终止字符. $ 匹 ...

  4. Sql Server批量删除指定表

    --批量删除以test的表开头的表 declare @name varchar(50) while(exists(select * from sysobjects where name like te ...

  5. [BS-30] 你真的会用storyboard开发吗?

    你真的会用storyboard开发吗?   随着苹果大屏手机的推出,苹果公司马上推出了屏幕适配的一些东西Constraints and Size Classes同时,在开发项目时候,是使用sb还是写代 ...

  6. JSP和Server的相互转化

    [设计想法] [前置条件] 1. eclipse的web环境已经搭建OK 2. eclipse已经存在web项目"firstweb" [操作步骤] 1. "firstwe ...

  7. 学习 Linux,101: 使用基本 SQL 命令

    概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操作 本教程将简要介绍您需要知道的与 LPI 102 考试相关的 SQL 概念.   回页首 数据库和 ...

  8. JS按回车键实现登录的方法

    本文实例讲述了JS按回车键实现登录的方法,该功能有着非常广泛的实用价值.分享给大家供大家参考之用.具体方法如下: 方法一: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 < ...

  9. Android -- 仿ios上下反弹效果

    1,前几天在一个app上看到了滑动反弹效果,觉得这个效果挺不错的,然后想自己来实现一下,在网上查了一下基本上都是大致的说了下思路,自己看了一下,决定把实现的思路来详细的写下来,先看一下我们实现的效果吧 ...

  10. mysql部署到云主机的笔记

    写了个程序,需要把数据库部署到云主机上 MySQL基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限 为了安全,新添加一个用户来进行远程登录 登录MYSQL: ...