用户申请内存的动态分配

2021年09月15日 阅读数:1
这篇文章主要向大家介绍用户申请内存的动态分配,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
       内核会为进程使用的代码和数据空间维护一个当前位置的值brk,这个值保存在每一个进程的数据结构中。它指出了进程代码和数据(包括动态分配的数据空间)在进程地址空间中的末端位置。当malloc()函数为程序分配内存时,它会经过系统调用brk()把程序要求新增的空间长度通知内核,内核代码从而能够根据malloc()所提供的信息来更新brk的值,但此时并不为新申请的空间映射物理内存页面。只有当程序寻址到某个不存在对应物理页面的地址时,内核才会进行相关物理内存页面的映射操做。
        当用户使用内存释放函数free()动态释放已申请的内存块时,c库中的内存管理函数就会把所释放的内存块标记为空闲,以备程序再次申请内存时使用。在这个过程当中内核为该进程所分配的这个物理页面并不会被释放掉。只有当进程最终结束时内核才会全面收回已分配和映射到该进程地址空间范围内的全部物理内存页面。