Linux学习笔记5——虚拟内存

系统 1791 0

一、为什么要有虚拟内存

  虚拟内存的提出,是为了禁止用户直接访问物理存储设备,有助于系统稳定。

 

二、为什么一个程序不能访问另外一个程序的地址指向的空间

  1:每个程序的开始地址0x80084000

  2:程序中使用的地址不是物理地址,而是逻辑地址(虚拟内存).
       逻辑地址仅仅是编号.编号使用int 4字节整数表示.
       2^32=4294967296=4G
       每个程序提供了4G的访问能力

 

三、内存映射

  逻辑地址与物理地址关联的过程是内存映射。

  虚拟地址与物理地址映射的时候有一个基本单位:至少会映射4K。

  段错误:无效访问. 那段内存没有映射,访问的内存超出了系统所给这个程序的内存空间。

  合法访问:比如malloc分配的空间之外的空间可以访问,但访问非法。因是越界访问

 

四、虚拟内存的分配

  分配释放内存:   int brk(void *end);   //分配空间,释放空间

          void *sbrk(int size);  //返回空间地址

  应用:1.使用sbrk分配空间

          2.使用sbrk得到没有映射的虚拟地址.
       第一次调用sbrk,sbrk(0)得到的是没有映射的虚拟首地址。

          3.使用brk分配空间

          4.使用brk释放空间

 

  sbrk(int  size):如果是第一次运行,则返回没有映射的空闲空间首地址,同时产生一个数据:指向地址

      sbrk与brk后台系统维护一个指针,指针默认是null。

      调用sbrk,判定指针是否是0,是:得到大块空闲空间的首地址初始化指针.同时把指针+size    

                                        否:返回指针,并且把指针位置+size

Linux学习笔记5——虚拟内存


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论