动态内存分配是指在程序执行过程中动态地分配或者回收存储空间的分配内存的方法。 他不像数组等静态内存分配那样需要预先分配足够的存储空间,而是根据程序的需要即时分配,并且分配的大小根据程序的要求调整。
molloc 是C语言中动态存储管理的一组标准库函数之一,作用是在内存的动态存储区中分配一个长度为size 的连续空间,参数是一个无符号整形术,返回值是一个指向所分配的连续存储域的起始地址指针,如果申请分配内存失败,就会返回NULL指针。
在X86平台下,32位linux进程的内存布局是这样的:
其中,栈从高地址向低地址扩展,堆从低地址向高地址扩展,mmap(文件映射区域)
与栈扩展方向一致,和堆相对扩展,直到耗尽虚拟地址空间中的剩余区域,这种结构便于 运行时使用映射区域和堆进行内存分配
内存分配的原理:
操作系统的角度看,进程分配内存有两种方式,分别由两个系统调用来完成:brk和mmap
brk 是将数据段的最高地址指针_edata往高地址推
mmap 是在进程的虚拟地址空间中文件映射区域(堆和栈之间)找一块空闲的虚拟内存
此两种方式分配的都是虚拟内存,