malloc()到底如何申请内存空间

 我来答
植星郗帅红
2020-06-26 · TA获得超过1028个赞
知道小有建树答主
回答量:1899
采纳率:100%
帮助的人:9.1万
展开全部
malloc()到底从哪里得到了内存空间?
答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。
操作系统中有一个记录空闲
内存地址

链表
。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。
malloc函数
的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表(Free
List)。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块(根据不同的算法而定(将最先找到的不小于申请的大小内存块分配给请求者,将最合适申请大小的空闲内存分配给请求者,或者是分配最大的空闲块内存块)。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。
调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行
返回值
的判断。
在此也要说明就是因为new和malloc需要符合大众的申请内存空间的要求,针对
泛型
提供的,分配内存设计到分配算法和查找,此外还要避免
内存碎片
,所以其效率比较低下,因此有时
程序猿
会自己重写new和delete,或者创建一个
内存池
来管理内存,提高程序运行的效率。
Jtti
2024-06-18 广告
导致香港服务器内存不足的原因比较多,Jtti总结了几点,具体如下:1、香港服务器应用程序池没有及时释放内存导致,应用程序池有一个默认回收的时间,到了这个时间就会自动释放内存,这个时间一般是1740分钟,而这种程度的时间可能会导致应用程序池无... 点击进入详情页
本回答由Jtti提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式