自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

转载 一篇文章彻底讲懂malloc的实现(ptmalloc)

C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用malloc。

2024-05-29 17:14:51 68

转载 dlmalloc 2.8.6 源码详解(7)

本文章由vector03原创, 转载至[vector03](https://blog.csdn.net/vector03/article/details/41314055)释放过程相对分配就简单多了基本着重在chunk合并, top裁剪, segment释放上. dlmalloc中合并是减少外部碎片最有效的方法了释放的主要过程就是根据用户传入的payload,找到chunk指针然后分别检查前一个和后一个chunk是否可以合并这里唯一需要注意的就是与dv和top。

2024-05-22 17:30:52 19 1

转载 dlmalloc 2.8.6 源码详解(4)

之所以需要额外引入这种数据结构是为了提升对非连续内存的管理能力。对某一大小内存的分配和释放都趋向于在一段时间里连续执行。从系统获取一定量内存后按照用户程序需求返回不同大小的。内存空间的整体分配能力和分配速度也获得了明显提升。这样其他人再来买同牌子的烟就继续从拆开的那条里取。如此全能的原因在于它位于内存空间的最顶端。其内部记录了关于内存分配的所有关键数据。这里使用的技术类似于操作系统中的就绪表。的初始状态与编译器的相关功能宏开关有关。小块内存如同人体血液中的坏胆固醇一样。此调用会根据传入的基址建立一个新的。

2024-05-22 17:26:41 29 1

转载 dlmalloc 2.8.6 源码详解(2)

本文章由vector03原创, 转载至[vector03](https://blog.csdn.net/vector03/article/details/40979181)这就保证了两种类型在基础结构上具有较好的兼容性。这个结构体中间填充多长的内容是没法确定的。的作用是将连续内存划分为一段段小的区块。将用户请求的内存值转化成实际的内部大小。与前者的区别在于管理上使用不同的结构。源码中定义了大量的宏来对其进行操作。的源码中有一幅用字符画成的示意图。在上一节的图中并没有画出对应的。

2024-05-22 17:25:00 22 1

转载 dlmalloc 2.8.6 源码详解(1)

本文章由vector03原创, 转载至[vector03](https://blog.csdn.net/vector03/article/details/40977679)

2024-05-22 17:22:56 103 1

转载 dlmalloc 2.8.6 源码详解(5)

本文章由vector03原创, 转载至[vector03](https://blog.csdn.net/vector03/article/details/41114611).首先在分配请求对应大小的分箱以及更大一级分箱中查找。如果没有则扩大范围在大于目标值的最小子树中搜索。的原因是最高有效和次高有效位用于计算分箱号。不这样写的原因可能是尽量减少各个平台的区别。本质上都是本着物尽其用的思想来挑选合适的。对多线程条件下的分配设计的还是比较简陋的。子树是当前分箱中大于目标值的最小子树。

2024-05-22 17:17:08 48 1

转载 dlmalloc 2.8.6 源码详解(6)

本文章由vector03原创, 转载至[vector03](https://blog.csdn.net/vector03/article/details/41205355).小节中介绍了从系统申请的扩展内存会根据其首地址和旧区段之间的位置关系做合并。该函数会在一开始将分配请求从扩展空间中切割出来。这个代码基本上就是本小节开始时介绍的流程。这有些类似第一步中的扩展空间。中向系统获取内存的主要接口。将之前申请的空间归还给系统。对于无法合并的扩展内存区域。向系统申请一块适当的内存。这一步申请的结果是要归入。

2024-05-22 17:14:50 41 1

转载 dlmalloc 2.8.6 源码详解(3)

本文章由vector03原创, 转载至 [vector03](https://blog.csdn.net/vector03/article/details/41008671)经过右移并与掩码计算的目的其实就是为了获得最高有效位的下一位。内存分配器设计中需要解决的两个重要问题就是空间和时间的矛盾。而后半部分一连串的计算其实就是判断是落在左边还是右边的分箱。的任意子树中根节点与其左右子树内的节点都没有明确的排序关系。号分箱则分别负责[2^9, 2^9+2^8)号分箱则负责[2^8+2^7, 2^9)

2024-05-22 17:08:39 26 1

原创 Linux进程间通信方式

前言进程间通信的目的操作系统为用户提供的用于实现进程之间进行通信的方式。Notes:进程之间是无法直接通信的,因为每一个进程都有自己独立的虚拟地址空间,所以进程具有独立性,无法直接通信。进程间通信方式有几类:匿名管道、命名管道、共享内存、消息队列、域socket、信号量。一、匿名管道二、命名管道三、共享内存本质:一块物理内存原理:开辟一块物理内存空间,多个进程将同一块内存通过页表映射到自己的虚拟地址空间,通过自己的虚拟地址空间直接进行访问。操作流程:1.创建或打开.

2021-11-14 12:56:29 842

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除