本文是关于实现的 malloc() 和 free() 函数系列文章的一部分。在最后一篇文章中,我们学会了如何重用内存块。这是一个很大的进步,但还有更多的改进空间。
一个例子是减少堆的大小,如第一篇文章所述。当我们释放最后一个内存块时,我们将堆的顶部移动到前一个块的末端。然而,前一个块和其他块也可能是免费的。考虑以下场景:
void *ptr1 = abmalloc(8); 无效 *ptr2 = abmalloc(8); abfree(ptr1); abfree(ptr2);
在这种情况下,当我们释放它时 ptr2 当指向块时,我们使用它 ptr1 成为最后一块。但是ptr1也是免费的,所以我们可以进一步减少堆的大小。
为了实现这一点,我们将从列表的末尾迭代指针,直到没有更多的空闲块。如果收到的指针的标头指向最后一块,而前一块是空的,我们将标头指针移动到它。我们重复这个过程,直到达到一个可用的块(如果是第一块,它是第一块) NULL)。然后,我们实施了堆减过程:
if(标题==最后){ while ((标题->上一个!= NULL) && 标题->上一个->可用) { 标题=标题->上一页; } 最后=标题->上一个; brk(标头); } 别的 {
现在,我们需要修理 abfree() 其中一个错误。根据规范,free() 函数应接受空指针,不执行任何操作。但是,如果 abfree() 接收到 NULL,我们会有分段错误!幸运的是,在函数开始时添加检查很容易修复:
void abfree(void *ptr) { 如果(ptr == NULL){ 返回; } 标头 *标头 = (标头*) ptr - 1;
所以,这就是我们现在的 abfree() 函数:
void abfree(void *ptr) { 如果(ptr == NULL){ 返回; } 标头 *标头 = (标头*) ptr - 1; 假如(标题==最后){ while ((标题->上一个!= NULL) && 标题->上一个->可用) { 标题=标题->上一页; } 最后=标题->上一个; brk(标头); } 别的 { 标头->可用= true; } }
减少堆的大小是一个简单的优化,但仍然存在挑战。在下一篇文章中,我们将讨论如何避免为小请求重复使用非常大的内存块。
(这篇文章是 Implementando malloc() e free() — reduzindo ainda mais o heap 翻译,首次发表 Suspens?o de Descren?a。)
以上就是实现 malloc() 和 free() — 进一步减少堆的详细内容,请关注其他相关文章!
品质卓越,力荐这几款顶尖免费虚拟主机!
实现 malloc() 和 free() — 进一步减少堆-C
服务器架构:核心基石,支撑高效运算与存储
云服务器:高效灵活,本地难及;本地受限,云上无界
我最近正在开发一种使用方法 go 编写的 cli 最近使用了工具 cobra 工具,我有一个用例,我需要其中一个命令的嵌套提示。我用它 promptui 作为一个提示,没有直接的方法来执行这个操作。本文将展示如何使用promptui。 创建嵌套提示。在这里可以找到完整的代码。
首先,我们需要创建一个空的Go项目。我们称之为嵌套提示:
$ mkdir 嵌套提示 && cd 嵌套提示 $ go mod init <a style="color:#f60; text-decoration:underline;" href="https://www.php.cn/zt/15841.html" target="_blank">git</a>hub.com//Thwani47/////nested-prompt
实现 malloc() 和 free() — 将元数据添加到内存块中-C
智能考勤新纪元,线上打卡高效无忧!
我最近正在开发一种使用方法 go 编写的 cli 最近使用了工具 cobra 工具,我有一个用例,我需要其中一个命令的嵌套提示。我用它 promptui 作为一个提示,没有直接的方法来执行这个操作。本文将展示如何使用promptui。 创建嵌套提示。在这里可以找到完整的代码。
首先,我们需要创建一个空的Go项目。我们称之为嵌套提示:
$ mkdir 嵌套提示 && cd 嵌套提示 $ go mod init <a styl
实现 malloc() 和 free() — 将元数据添加到内存块中-C
整数溢出-C
踏上为期一年的软件工程之旅:从 C 到 Python、JavaScript、Node.js、DevOps 等-C
《王者荣耀》元流之子上线时间介绍-手机游戏策略
“最强祖师”升级专业技能道具介绍-手机游戏策略
最强祖师后勤弟子招募策略-手机游戏策略
南宫婉最强祖师的技能强度和玩法策略-手机游戏策略
“绝区零”体力使用策略-手机游戏策略
阴阳师禅心云外镜新皮肤获取策略-手机游戏策略
如何抗腐蚀不朽之旅 《不朽之旅》腐化装备保障机制介绍-手机游戏策略
《地下城与勇士:起源》女鬼剑上线时间详解-手机游戏策略