一、内存管理(续)
每个进程都有自己独立的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将物理地址映射到进程的虚拟地址空间

最新文章

  1. IHttpHandler给图片加水印
  2. 使用crosswalk优化ionic2应用包
  3. python作为一种胶水和c/c++
  4. Java基础之处理事件——应用程序中的语义事件监听器(Sketcher 5 with element color listeners)
  5. grunt初体验
  6. cygwin and its host machine
  7. spring framework项目源码github托管地址
  8. C# TCP多线程服务器示例
  9. html超级简单实现点赞(收藏)和取消赞效果
  10. 重构tableview!
  11. IOS中的数据存储方式,特点,使用情况
  12. window的三大功能,行内样式获取的讲解 getcomputerStyle
  13. python编码你需要知道的编码风格
  14. Jindent——让intellij idea 像eclipse一样生成模版化的javadoc注释
  15. [LeetCode] 675. Cut Off Trees for Golf Event_Hard tag: BFS
  16. Django(一)创建和启动项目
  17. (xampp)lampp 下配置https(ssl)自签双向认证以后 apache无法启动解决方案
  18. asp.net菜鸟到中级程序员的飞跃 --30本好书点评
  19. 企业搜索引擎开发之连接器connector(十七)
  20. Java - 将 List 等分(最后一部分处理多余部分)

热门文章

  1. ASP.NET MVC 提供与訪问 Web Api
  2. 多个机器获取微信access-token导致的有效性问题
  3. [Node.js] Add Logging to a Node.js Application using Winston
  4. elciple中怎样设置字体大小
  5. java 效率编程 的一些小知识点
  6. luogu1273 有限电视网
  7. java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState问题解决
  8. Google android source code build 问题总结【转】
  9. IJ:Idea 常用代码
  10. 713C