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. EL表达式与JSTL

    内容包括 EL表达式 EL函数库 JSTL 核心标签库 格式化标签库 SQL标签库 XML标签库 自定义标签库 EL表达式 EL是Expression Language的是缩写,是JSP页面编写的一种 ...

  2. ios-NSMutableAttributedString 更改文本字符串颜色、大小

    NSString * string = [NSString stringWithFormat:@"您的号码是%@号",[self backString:dic[@"ran ...

  3. C#网络编程之--TCP协议(一)

    TCP 是面向连接的传输协议 面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的 TCP 是全双工的传输协议 全双工,这个理解起来也很简单,A打电话给B,B接听电 ...

  4. GDC2016 [全境封锁],11个种类5个派系的敌人设计思路

    [汤姆克兰西:全境封锁],11个种类5个派系的敌人设计思路 实现[汤姆克兰西]射击RPG的AI开发   日文链接:http://game.watch.impress.co.jp/docs/news/2 ...

  5. Multi-level Multi-select plugin

    Property file: Country[tab]City United States[tab]San Francisco United States[tab]Chicago Mexico[tab ...

  6. 【C51】74HC573芯片

    74HC573是一个8位3态带锁存高速的逻辑芯片.下面介绍使用. 参数(仅供参考) Vcc   2~6V I in    +-20mA I out  +- 35mA 引脚图和引脚作用          ...

  7. 【行业交流】2016 TiD质量竞争力大会——移动互联网测试到质量的转变之路

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5691233.html TiD质量大会在北京召开,有幸去参加 ...

  8. MySQL乱码解决办法

    MySQL支持几十种编码方式,并且默认的编码为:latinl,如果MySQL出现了乱码情况,不要慌乱,一下为你介绍两种解决编码方式: 在控制台输入命令,注意MySQL中的UTF-8写成utf8,例如我 ...

  9. git pull all braches

    控制台下执行如下: git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote ...

  10. Java学习-047-数值格式化及小数位数四舍五入

    此小工具类主要用于数值四舍五入.数值格式化输出,很简单,若想深入研究,敬请自行查阅 BigDecimal 或 DecimalFormat 的 API,BigDecimal.setScale(位数,四舍 ...