一、内存管理(续)
每个进程都有自己独立的4G的虚拟地址空间。
冯.诺伊曼体系结构
哈佛体系结构
section 代码段 只读数据段 栈段 举例说明 数据所属的段。
代码参见 memory.c
如何获取进程自己的pid?
getpid()
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
功能:获取进程的id
参数:
void
返回值:
pid_t 当前进程的pid cat /proc/pid/maps 初始化和赋值是两码事 栈段和代码段 数据段 栈段 栈段是一个容器,栈段中有多个栈帧。
一个进程只有一个栈段。 每个函数都有自己的栈帧,在函数结束的时候,函数的栈帧释放。
函数中变量的空间分配在栈帧上的,变量的空间释放了。
变量的生命结束了。
什么样的变量的空间分配在栈帧上?
函数中的自动局部变量和函数的形参的空间分配在栈帧中。 函数 静态的局部变量和全局变量的空间分配在数据段。进程
但两者的作用域不同。
stack
heap
代码段 数据段 堆、 栈
堆的生命周期 要么程序员手动释放堆空间。否则,进程结束的时候。 二、使用mmap将物理地址映射到进程的虚拟地址空间。 mmap()
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
功能:将文件或者设备映射到内存
参数:
addr:指定了映射区域的起始地址。NULL 地址有内核决定 length:指定了映射区域的长度
prot:
PROT_EXEC Pages may be executed.
PROT_READ Pages may be read.
PROT_WRITE Pages may be written. PROT_NONE Pages may not be accessed. flags:
2选1:
MAP_SHARED:对映射区域的更新给其他进程看,也同步到下层的文件。 MAP_PRIVATE:对映射区域的更新不给其他进程看。也不同步到下层的文件 MAP_ANONYMOUS:映射区域的内容被初始化为0.不与任何文件相关。
如果指了这个参数。fd和offset被忽略。 fd:文件描述符(文件)
offset:文件的起始位置(文件)
返回值:
MAP_FAILED 错误 errno被设置
返回映射区域的首地址。 int munmap(void *addr, size_t length);
功能:解除文件到内存的映射
参数:
addr:mmap()的返回值
length:指定了映射区域的长度。
返回值:
成功
- 失败 errno被设置 补充:
一切皆文件。
举例说明,使用mmap将物理地址映射到进程的虚拟地址空间,然后对虚拟地址空间进行操作。代码参见mmap.c 总结:
一、进程的映射
代码段 数据段 堆 栈
周六日 复习C语言
二、使用mmap将物理地址映射到进程的虚拟地址空间

进程映射、mmap(day05)的更多相关文章

  1. 内存映射MMAP和DMA【转】

    转自:http://blog.csdn.net/zhoudengqing/article/details/41654293 版权声明:本文为博主原创文章,未经博主允许不得转载. 这一章介绍Linux内 ...

  2. Linux内存映射(mmap)系列(1)

    看到同事的代码中出现了mmap.所以自己私下学习学习,研究研究..... http://www.cnblogs.com/lknlfy/archive/2012/04/27/2473804.html ( ...

  3. 内存映射mmap的几个api及其使用

    内存映射 mmap 内存映射mmap函数的作用是建立一段可以被两个或者多个程度读写的内存段,一个程序对他进行任何修改,对其它程序可见.同样,这个功能可以用在对文件的处理上,mmap函数创建一个指向一个 ...

  4. 深入理解内存映射mmap

    内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点. 修改(2015-11-12):Linux的虚拟内存管理是基于mmap来实现 ...

  5. [转载]linux内存映射mmap原理分析【转】

    转自:http://www.cnblogs.com/wanpengcoder/articles/5306688.html 转自:http://blog.csdn.net/yusiguyuan/arti ...

  6. 计算机底层知识拾遗(九)深入理解内存映射mmap

    内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点. 修改(2015-11-12):Linux的虚拟内存管理是基于mmap来实现 ...

  7. 共享内存与存储映射(mmap)

    [前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...

  8. 文件映射mmap

    磁盘与内存的映射就是文件映射,说这个问题之前我们先说下swap,因为   这个问题让我很容易想起swap,linux swap 是交换分区的意思,在内存不   够的情况下,操作系统先把内存与磁盘的sw ...

  9. 内存映射mmap

    Table of Contents 1. 什么是mmap 2. 使用方法 2.1. mmap构造器的格式 2.2. 例子1 2.3. 例子2 3. 其它 4. 参考资料 什么是mmap 通常在Unix ...

随机推荐

  1. Android简单调用相机Camera功能,实现打开照相功能

    在最開始接触Android相机功能之前,先来体验一下Android调用系统照相功能吧 核心代码 Intent intent = new Intent(); //调用照相机 intent.setActi ...

  2. Facebook图搜索unicorn

    unicorn(独角兽),里面类似于倒排链的reference list,相应的term如friend:2,表示entity 2的朋友列表,整个结构是shard的,上面是top aggregator, ...

  3. Color a Tree HDU - 6241

    /* 十分巧妙的二分 题意选最少的点涂色 使得满足输入信息: 1 x的子树涂色数不少于y 2 x的子树外面涂色数不少于y 我们若是把2转化到子树内最多涂色多少 就可以维护这个最小和最大 如果我们二分出 ...

  4. oc61--block

    // // main.m // Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调. // 用来保存一段代码,在恰当的时候拿出来调用.功能类似于函数.函数不能嵌套定义,blo ...

  5. Parallel in C#

    https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel ...

  6. poj 2142

    Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. F ...

  7. JFreeChart之堆叠柱形图(StackedBar)

    JFreeChart之堆叠柱形图(StackedBar) JAVA JFreeChart 最近的项目使用有个功能需要使用到堆叠柱形图,看了项目以前的代码实现没有想要的结果.所以自己就先到官网下载了 D ...

  8. 在linux查看内存的大小

    用free -m查看的结果: # free -m          total    used    free     shared buffers     cached Mem:           ...

  9. LocalDateTime查找最近的五分钟点

    /** * 最近的五分钟 * @param dateTime * @return */ public static LocalDateTime getNear5(LocalDateTime dateT ...

  10. 【BZOJ1306】match循环赛

    预先警告:我的做法代码量比较大 看完题目后看到数据n<=8, 不难想到这题可以写深搜来做 分析 比如说以数据: 3 3 3 3 为例子, 进行了三场比赛:AB AC BC: 我们只要搜索每场比赛 ...