操作系统内存映射

内存映射

自动映射
  • 当程序执行时,操作系统会把它加载到内存形成进程后,会自动地给text、data、bss、stack、命令行参数、环境变量表进行自动映射

手动映射
  • 在程序首次使用malloc申请内存时,此时malloc手中没有堆内存可以分配,也就是说没有任何映射过的内存可以供分配使用,malloc会找系统申请映射33页虚拟内存,这33页映射后交由malloc管理分配,之后再找malloc申请内存时,malloc会从这33页中直接分配给调用者,如果33页分配完,继续重复以上操作,这个过程malloc底层调用了操作系统的API接口函数完成映射的操作

  • 如果程序需要的堆内存并不多,距离33页差距很大,那么直接使用malloc是方便,但是也造成了很大的内存映射浪费,所以通过学习直接调用系统的API接口函数,来更精确地映射内存

  • 关于malloc获取虚拟内存空间的实现过程,与内核版本有关,大体逻辑:

    • 如果分配的内存小于128Kb,底层调用sbrk\brk

    • 如果分配的内存大于128Kb,底层调用mmap\munmap

    • 以上只是简单情况,具体实际可能会更复杂

  • 21
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值