malloc_consolidate

此文章用于详细介绍malloc_consolidate。

众所周知,fastbin一般是不能合并,但在malloc_consolidate中是个例外。

1.触发机制

首先构造这样的堆块结构

一个0x40的堆块在fastbin中,一个0x110的堆块在unbin中

随后我们尝试分配一个0x300的堆块。

可以看到0x110的usbin被丢到了smallbin中,fastbin没有被合并

但我们试着改成分配0x500的堆块。

可以看到fastbin和usbin完成了合并,并被放到了smallbin中。

得出结论:当你malloc一个大于smallbin的堆块,它会将fastbin拿到usbin中,让它尝试与周围的堆块合并,如果没被分配,就扔到适当的bin中。

这里可能有人会有疑惑:如果fastbin不能合并,是否还会被分配到smallbin中?fastbin之间在这种情况下能否合并?

开始试验:

这次我们只free一个fastbin,然后再尝试malloc(0x500),以下是结果。

可以看到,即使fastbin不参与合并,也会被先被拉进usbin,然后被扔到smallbin中。

接下来进行第二个实验:

我们先释放了2个fastbin,然后再尝试malloc(0x500),以下是结果:

即使是fastbin之间,也会进行合并!

2.补充

之前一直以为fastbin自身的pre_inuse一直是1,所以一直在想合并的时候fastbin怎么识别前面的chunk是不是freechunk。

但经过试验发现,当前面的chunk是freechunk并且不是fastbin的时候,自身的pre_inuse为0,只是不参与合并。

当一个chunk被free时,若它属于fastbin,则它的下一个chunk的pre_inuse位不会被改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703323.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Day3:JAVA运算符、方法的介绍】

目录 1、运算符1.1 赋值运算符1.2 比较运算符1.3 逻辑运算符1.3.1 逻辑运算符概述1.3.2 逻辑运算符分类1.3.3 短路的逻辑运算符 1.4 三元运算符1.5 运算符优先级 2、方法2.1 方法介绍2.2 方法的定义和调用格式2.2.1 方法的调用2.2.2 带参数方法的调用2.2.3 带返回值方法的调用2…

【Uniapp】简易封装提示框showToast/showModal

组件 // 封装提示框 export const showModal (content, showCancel false, title "提示") > {return new Promise((resolve, reject) > {uni.showModal({title: title,content: content,showCancel: showCancel,success: (res) > {resolve(res);},fail:…

Ubuntu 下使用 Scons 交叉编译嘉楠堪智 CanMV K230 大小核 Coremark 程序

在 Ubuntu 下使用 SCons 进行交叉编译嘉楠堪智 CanMV K230 大小核(不同的玄铁 C908 核心)的 C 程序,以 Coremark 程序为例,顺便测试一下大小核和编译器的性能。 2024年3月14日,嘉楠科技宣布推出了全球首款支持 RISC-V…

中国历史朝代顺序表(全)

三皇五帝始,尧舜禹相传; 夏商与西周,东周分两段; 春秋和战国,一统秦两汉; 三分魏蜀吴,二晋前后沿; 南北朝并立,隋唐五代传; 宋元明清后,皇朝…

秋招算法复习——5/15——三数之和

文章目录 问题描述思路分析实现代码分析与总结 问题描述 思路分析 三个之和为零,即a b c 0 ,将这个拆解为b c -a ,那就变成了两数之和问题。两重指针的模版来解决。 虽然列表中存在重复的数字,但是结果不允许存在重复的组合…

从开发板导出根文件系统并修改(Ubuntu)

前面提到过基于ubuntu-base去构建根文件系统基于Ubuntu-base构建根文件系统-CSDN博客,但是有时候我们并不需要重头开始,可以基于现有的根文件系统做调整。又或者我们直接在出厂的系统上去搭建好自己的运行环境并且编译出自己想要的程序,现在要…

SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析

原文链接:SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604401&idx4&snd2d39846dce07bee765c820de1cf92f3&chksmfa821956cdf5904…

如何通过汽车制造供应商协同平台,提高供应链的效率与稳定性?

汽车制造供应商协同是指在汽车制造过程中,整车制造商与其零部件供应商之间建立的一种紧密合作的关系。这种协同关系旨在优化整个供应链的效率,降低成本,提高产品质量,加快创新速度,并最终提升整个汽车产业的竞争力。以…

【合成孔径雷达】合成孔径雷达的多视角理解和时/频成像算法的统一解释

文章目录 一、什么是雷达成像(1)主要的遥感探测手段:光学、红外和雷达(2)从数学的角度:雷达成像主要研究什么?数据采集: y T x n yTxn yTxn信息提取: y − > x ? y…

git 拉取指定目录

指令方式 打开 git 自带的Git Bash 工具 以拉取github中 fastjson 的 /src/test/java/oracle/sql/ 目录为例 1.创建文件夹和git 初始化 cd D:/Program\ Files mkdir fastjson cd fastjson git init 2.设置允许克隆子目录 git config core.sparsecheckout true 3.添加远程…

稚晖君独家撰文:具身智能即将为通用机器人补全最后一块拼图

具身智能新纪元。 *本文为稚晖君独家供稿,「甲子光年」经智元机器人授权发布。稚晖君本名彭志辉,先后任职OPPO、华为,现为智元机器人CTO、首席架构师。 在ChatGPT之后,又一个大模型概念火了——具身智能(Embodied AI)。 在学术界,图灵奖得主、上海期智研究院院长姚期…

Linux|如何允许 awk 使用 Shell 变量

引言 当我们编写 shell 脚本时,我们通常会在脚本中包含其他较小的程序或命令,例如 awk 操作。就 Awk 而言,我们必须找到将一些值从 shell 传递到 Awk 操作的方法。 这可以通过在 Awk 命令中使用 shell 变量来完成,在本文中&#x…