动态内存管理以及molloc的底层实现

本文介绍了动态内存分配的概念,重点讲解了C语言中的molloc函数如何在32位Linux环境下分配内存。内容包括内存布局、brk和mmap系统调用的工作方式,以及molloc在不同内存大小分配时的策略。同时阐述了free释放内存的机制,以及内存碎片问题。
摘要由CSDN通过智能技术生成

  动态内存分配是指在程序执行过程中动态地分配或者回收存储空间的分配内存的方法。 他不像数组等静态内存分配那样需要预先分配足够的存储空间,而是根据程序的需要即时分配,并且分配的大小根据程序的要求调整。
  molloc 是C语言中动态存储管理的一组标准库函数之一,作用是在内存的动态存储区中分配一个长度为size 的连续空间,参数是一个无符号整形术,返回值是一个指向所分配的连续存储域的起始地址指针,如果申请分配内存失败,就会返回NULL指针。
在X86平台下,32位linux进程的内存布局是这样的:
在这里插入图片描述

其中,栈从高地址向低地址扩展,堆从低地址向高地址扩展,mmap(文件映射区域)
与栈扩展方向一致,和堆相对扩展,直到耗尽虚拟地址空间中的剩余区域,这种结构便于 运行时使用映射区域和堆进行内存分配

内存分配的原理:
   操作系统的角度看,进程分配内存有两种方式,分别由两个系统调用来完成:brk和mmap
brk 是将数据段的最高地址指针_edata往高地址推
mmap 是在进程的虚拟地址空间中文件映射区域(堆和栈之间)找一块空闲的虚拟内存

此两种方式分配的都是虚拟内存,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值