• Linux操作系统的内存使用方法详细解析


     一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。
      
      Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。
      
      这里要提到一个很重要的概念,内存的延迟分配。Linux内核在用户申请内存的时候,只是给它分配了一个线性区(也就是虚存),并没有分配实际物理内存;只有当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,这时候才占用宝贵的物理内存。内核释放物理页面是通过释放线性区,找到其所对应的物理页面,将其全部释放的过程。
      
      char *p=malloc(2048) //这里只是分配了虚拟内存2048,并不占用实际内存。
      
      strcpy(p,”123”) //分配了物理页面,虽然只是使用了3个字节,但内存还是为它分配了2048字节的物理内存。
      
      free(p) //通过虚拟地址,找到其所对应的物理页面,释放物理页面,释放线性区。
      
      我们知道用户的进程和内核是运行在不同的级别,进程与内核之间的通讯是通过系统调用来完成的。进程在申请和释放内存,主要通过brk,sbrk,mmap,unmmap这几个系统调用,传递的参数主要是对应的虚拟内存。
      
      注意一点,在进程只能访问虚拟内存,它实际上是看不到内核物理内存的使用,这对于进程是完全透明的。
      
      glibc内存管理器
      
      

  • 相关阅读:
    Oracle数据库之审计(五)
    孤儿僵尸守护进程
    ke8学校陈老师H5
    3分钟告诉你如何成为一名黑客|零基础到黑客入门指南,你只需要掌握这五点能力
    如何保证 HTTPS 证书的有效性?
    pdf转cad怎么弄?教你这几种快速转换cad的方法
    10.8号作业
    LeetCode 93 Java 实现
    Java — static修饰符
    【性能测试】【监控】Python使用psutil实现一个简单的系统资源监控
  • 原文地址:https://blog.csdn.net/cqn2bd2b/article/details/127454012