内存原理分析

版权声明:如有需要转载,请声明出处 https://blog.csdn.net/hehuang139/article/details/86686957

WHY

  • 增加内存的利用率
    • 内存超载
      • 实际需要的内存比实际内存大
    • 内存碎片
    • 保护和重定向
      • 不能相互干扰
      • 重定向,内存分配
  • 方便编程
    • 内存共享
    • 动态链接实现

HOW

段页式内存管理

虚拟内存地址空间

  • 原理
    • 内存使用的局部性特征

地址空间

  • WHAT
    • 每个进程用于寻址内存的一套地址集合
    • 每个进程拥有自己的地址空间(可以共享)
  • HOW 实现方案
    • 基址寄存器和界限寄存器
      • 基址寄存器保存进程的物理内存起始地址
      • 界限寄存器保存进程的最大内存长度
      • 优缺点
        • 加法操作和比较操作耗时
        • 内存扩展性差
    • 分页/分段技术

交换技术

  • how
    • 对于不活跃的进程,将空闲的内存交换到磁盘上,需要使用时在交换内存中
  • 优缺点
  • 监控
    • 查看swap内存的使用情况

管理内存(使用、空闲)

位图法
  • 优缺点
    • 简单
    • 分配内存需要查找连续的0,效率低
链表法
  • how
    • 每个节点管理一个内存快
      • H 空闲, P 进程占用
      • 开始地址
      • 空间大小
    • 分配方案
      • 最佳适配,充分利用内存块,但是会产生大量内存碎片,反而浪费内存
      • 最差适配
      • 首次适配 效率最高
      • 下次适配 效率不是太高
    • 改进
      • 两个链表管理空闲快,一个空闲,一个进程
      • 但是释放会比较消耗时间

分页

WHAT

连续内存分配->离散的内存分配

  • 将虚拟内存空间(页)和物理内存空间(页框)分成固定大小的内存块,即一个页,一般是4k大小,

HOW

  • 组成
    • 页表 页和页框的映射关系
    • 缺页中断 如果页没在物理内存中则发生缺页中断
    • 页面置换
  • 优化点
    • 快表
    • 多级页表

分段

大致类似

代码的虚拟内存空间

如果是32位系统,虚拟内存空间位4G(3G用户空间,1G内核空间),如果是64位系统则为(48,没用到64,不需要)

  • 代码端
  • stack
  • mmap

linux api

  • alloc 从栈中分配内存
  • malloc 从堆中分配内存
    • 只是移动brk位置,并没做实际的内存分配,所以此时并不会发生页面分配
    • < 128k, 直接在堆上分配 系统调用brk
    • 128k, 在mmap上分配 do_mmap

  • calloc 分配内存,并初始化,

猜你喜欢

转载自blog.csdn.net/hehuang139/article/details/86686957