zoukankan      html  css  js  c++  java
  • Linux学习笔记5——虚拟内存

    一、为什么要有虚拟内存

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

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

      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

  • 相关阅读:
    linq 查询-“必须是可缩小的节点”
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”
    将字符串转换为double类型的list
    mysql新增用户无法授权!? 解决方案
    eclipse项目有红色感叹号
    错误: 找不到或无法加载主类 java操作hbase出错
    org.apache.hadoop.conf.Configuration无法引用 解决方法
    jdbc的数据库驱动类DriverManager.getConnection()详解
    MySQL [Err] 1055--1064
    控制反转
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3463025.html
Copyright © 2011-2022 走看看