动态内存分配器的实现(实验PPT讲稿)

实验三:动态内存分配器的实现 助教:吴加禹、李佳伟、唐凯成 田成锦、汪睿、游翎璟
实验三:动态内存分配器的实现 助教:吴加禹、李佳伟、唐凯成 田成锦、汪睿、游翎璟

实验目的 学习内存管理模型与其数据结构 使用显示空闲链表实现一个32位系统堆内存分配器 了解基础的内存管理算法 尝试更高级的内存分配算法(*) 2021/1/26
实验目的 ➢学习内存管理模型与其数据结构 ➢使用显示空闲链表实现一个32位系统堆内存分配器 ➢了解基础的内存管理算法 ➢尝试更高级的内存分配算法(*) 2021/1/26 2

实验环境 主机: Ubuntu32位1404(或其他32位 Ubuntu系统) >本次实验搭载在助教提供的由c构架的一个简易内存管理分 配平台上 下载教学主页上的lab-3基础代码并解压即可开始实验 2021/1/26
实验环境 ➢主机:Ubuntu 32位 14.04 (或其他32位Ubuntu系统) ➢本次实验搭载在助教提供的由c构架的一个简易内存管理分 配平台上 ➢下载教学主页上的lab-3基础代码并解压即可开始实验 2021/1/26 3

实验讲解—1.有关内存管理的AP简介 malloc/free是c标准库函数,用于从堆中分配内存 void* malloc(size t size); malloc函数返回一个指针,指向大小至少为sze字节的空闲 内存块。 返回的内存块首地址是双字对齐的,即在64位系统中地址 为16的倍数,32位系统中为8的倍数。 2021/1/26
实验讲解——1.有关内存管理的API简介 ➢malloc/free是c标准库函数,用于从堆中分配内存 ➢malloc函数返回一个指针,指向大小至少为size字节的空闲 内存块。 ➢返回的内存块首地址是双字对齐的,即:在64位系统中地址 为16的倍数,32位系统中为8的倍数。 2021/1/26 4 void* malloc(size_t size);

实验讲解—1.有关内存管理的AP简介 void sbrk (intptr t incr); 进程的堆内存是有限的,内核维护一个指针brk指向当前堆顶。 >当堆中剩余内存不足以响应 malloc请求时,需要向操作系统 申请更多的堆内存。sbrk函数通过将bk指针增加inc来扩展 和收缩堆(即当incr为负数时收缩堆)。成功时返回旧bk的地 址(因此扩展堆后返回值指向一块大小为incr的空闲内存),失 败时返回 2021/1/26
实验讲解——1.有关内存管理的API简介 ➢进程的堆内存是有限的,内核维护一个指针brk指向当前堆顶。 ➢当堆中剩余内存不足以响应malloc请求时,需要向操作系统 申请更多的堆内存。sbrk函数通过将brk指针增加incr来 扩展 和收缩堆(即当incr为负数时收缩堆)。成功时返回旧brk的地 址(因此扩展堆后返回值指向一块大小为incr的空 闲内存),失 败时返回-1。 2021/1/26 5 void *sbrk(intptr_t incr);

实验讲解—1.有关内存管理的AP简介 void free(void *ptr)i fre函数释放ptr指向的内存块,释放出的内存可以在之后的 malloc调用中被使用。 注意pt必须指向由 malloc. calloc、 realloc分配的内存块的 起始位置。 2021/1/26
实验讲解——1.有关内存管理的API简介 ➢free函数释放ptr指向的内存块,释放出的内存可以在之后的 malloc调用中被使用。 ➢注意:ptr必须指向由malloc、calloc、realloc分配的内存块的 起始位置。 2021/1/26 6 void free(void *ptr);

实验讲解—2隐式空闲链表管理 隐式空闲链表 隐式空闲链表将堆中的内存块按地址顺序串成一个链表,接受到内 存分配请求时,分配器遍历该链表来找到合适的空闲内存块并返回。 当找不到合适的空闲内存块时(如堆内存不足,或没有大小足够的 空闲内存块),调用Sbk向堆顶扩展更多的内存。 未使用的 堆的 双字 起始 8/0 16/l 320 对齐的 ■图中淡蓝色部分为已分配块,深蓝色为填充块(为了内存双字对齐 数字为块头部。 2021/1/26
实验讲解——2.隐式空闲链表管理 ➢隐式空闲链表 ◼ 隐式空闲链表将堆中的内存块按地址顺序串成一个链表,接受到内 存分配请求时,分配器遍历该链表来找到合适的空闲内存块并返回。 ◼ 当找不到合适的空闲内存块时(如:堆内存不足,或没有大小足够的 空闲内存块),调用sbrk向堆顶扩展更多的内存。 ◼ 图中淡蓝色部分为已分配块,深蓝色为填充块(为了内存双字对齐), 数字为块头部。 2021/1/26 7

实验讲解—2隐式空闲链表管理 >块头部表 ■堆中的各内存块需要某种标志来区分块的边界,记录块的大小,以 及标记该内存块是否已被使用。因此为每个内存块保留一个字(4字 节)的头部记录这些数据。 块头部记录了该内存块的大小。由于内存块以8字节对齐,块大小 二进制的最低3位一定为0,因此可以用最后一位来标记该块是否已 被分配。 31头部 210 ma1loc返回一个指针, 块大小 a=1:已分配的 00a a=0:空闲的 它指向有效载荷的开始处 有效载荷 块大小包括头部 (只包括已分配的块) 有效载荷和所有的填充 填充(可选) 个简单的堆块的格式 2021/1/26
实验讲解——2.隐式空闲链表管理 ➢块头部表 ◼ 堆中的各内存块需要某种标志来区分块的边界,记录块的大小,以 及标记该内存块是否已被使用。因此为每个内存块保留一个字(4字 节)的头部记录这些数据。 ◼ 块头部记录了该内存块的大小。由于内存块以8字节对齐,块大小 二进制的最低3位一定为0,因此可以用最后一位来标记该块是否已 被分配。 2021/1/26 8

实验讲解—2隐式空闲链表管理 >链表管理 在隐式链表管理方案下,分配器维护一个指针 heap listp指向堆 中的第一个内存块,也即链表中的第一个块。 ■根据该内存块头部中记录的块大小信息便可计算出下一块的位置 heap listptsIze ),依此类推 >放置策略 当请求一个k字节的内存块时,分配器需要搜索堆中的内存块找 到一个足够大的空闲块并返回。具体选择哪一个内存块由放置 策略决定。主要有两种 首次适配∶从头开始搜索链表,找到第一个大小合适的空闲内存 块便返回。 最佳适配∶搜索整个链表,返回满足需求的最小的空闲块。 两者相比较,首次适配速度较快,最佳适配内存利用率更高。后 面的实现采用首次适配方法。 2021/1/26
实验讲解——2.隐式空闲链表管理 ➢链表管理 ◼ 在隐式链表管理方案下,分配器维护一个指针heap_listp指向堆 中的第一个内存块,也即链表中的第一个块。 ◼ 根据该内存块头部中记录的块大小信息便可计算出下一块的位置 (heap_listp+size),依此类推。 ➢放置策略 ◼ 当请求一个k字节的内存块时,分配器需要搜索堆中的内存块找 到一个足够大的空闲块并返回。具体选择哪一个内存块由放置 策略决定。主要有两种: ⚫ 首次适配:从头开始搜索链表,找到第一个大小合适的空闲内存 块便返回。 ⚫ 最佳适配:搜索整个链表,返回满足需求的最小的空闲块。 ◼ 两者相比较,首次适配速度较快,最佳适配内存利用率更高。后 面的实现采用首次适配方法。 2021/1/26 9

实验讲解—2隐式空闲链表管理 分割空闲块 当分配器找到一个合适的空闲块后,如果空闲块大小大于请求的内 存大小,则需要分割该空闲块,避免内存浪费。 具体步骤为 修改空闲块头部,将大小改为分配的大小,并标记该块为已分配。 为多余的内存添加一个块头部,记录其大小并标记为未分配,使其成 为一个新的空闲内存块。 返回分配的块指针 未使用的 堆的 双字 起始 8/0 16/l 320 l6/1 位置 对齐的 未使用的 堆的 8/0 16/1l 16/1 6 双字 起始 160 位置 对齐的 2021/1/26
实验讲解——2.隐式空闲链表管理 ➢分割空闲块 ◼ 当分配器找到一个合适的空闲块后,如果空闲块大小大于请求的内 存大小,则需要分割该空闲块,避免内存浪费。 ◼ 具体步骤为: ⚫ 修改空闲块头部,将大小改为分配的大小,并标记该块为已分配。 ⚫ 为多余的内存添加一个块头部,记录其大小并标记为未分配,使其成 为一个新的空闲内存块。 ⚫ 返回分配的块指针。 2021/1/26 10
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- Java面向对象程序设计:Java的接口(PPT讲稿).pptx
- 赣南师范大学:《计算机网络技术》课程教学资源(PPT课件讲稿)第十章 Internet概述.ppt
- 《编译原理》课程教学资源(PPT课件讲稿)第四章 语法分析——自上而下分析.ppt
- 《网络搜索和挖掘技术》课程教学资源(PPT讲稿)Lecture 1:Web Search Overview & Web Crawling.ppt
- 《程序设计语言》课程PPT教学课件(章节大纲).ppt
- 长春大学旅游学院:《计算机网络与网络安全》课程教学资源(PPT课件)第6章 计算机网络与网络安全.ppt
- JavaScript编程基础(JavaScript语法规则).ppt
- 《面向对象程序设计》课程PPT教学课件:第1章 Visual Basic概述(主讲:高慧).ppt
- 西安电子科技大学:Operating-System Structures(PPT讲稿).pptx
- 电子科技大学计算机学院:《现代密码学》课程PPT教学课件(密码学基础)第一章 引言.ppt
- 山东大学:《微机原理及单片机接口技术》课程教学资源(PPT课件讲稿)第九章 模数转换器与数模转换器.ppt
- 香港浸会大学:《Data Communications and Networking》课程教学资源(PPT讲稿)Chapter 10 Circuit Switching and Packet Switching.ppt
- 杭州电子科技大学:《计算机、互联网和万维网简介》教学资源(PPT课件)Chapter 01 C++ Programming Basics.ppt
- 《E-commerce 2014》电子商务(PPT讲稿)Chapter 5 E-commerce Security and Payment Systems.ppt
- 《WEB技术开发》教学资源(PPT讲稿)HTML AND CSS.ppt
- 《E-commerce 2014》电子商务(PPT讲稿)Chapter 12 B2B E-commerce:Supply Chain Management and Collaborative Commerce.ppt
- 清华大学出版社:《WEB技术开发》课程教学资源(PPT课件)第1章 WEB开发技术概述.ppt
- 《E-commerce 2014》电子商务(PPT讲稿)Chapter 9 Online Retail and Services.ppt
- 浙江大学:虚拟现实中基于图像的建模和绘制(报告PPT).ppt
- 生物信息数据分析技能培训:计算机基础技能培训(linux基础知识).pptx
- 东南大学:《数据结构》课程教学资源(PPT课件讲稿)随机算法(主讲:方效林).pptx
- 中国科学技术大学:《现代密码学理论与实践》课程教学资源(PPT课件讲稿)第1章 引言(主讲:苗付友).pptx
- 《算法设计与分析 Design and Analysis of Algorithms》课程PPT课件:Tutorial 10.pptx
- 《C程序设计》课程PPT电子教案:第一章 概述.ppt
- 南京大学:《嵌入式网络物理系统》课程教学资源(PPT讲稿)时光自动机 Timed Automata.ppt
- 《PowerPoint》课程PPT教学课件:第六章 使用PowerPoint创建演示文稿.ppt
- 香港科技大学:Web-log Mining:from Pages to Relations.ppt
- 中国科学技术大学计算机学院:《高级操作系统 Advanced Operating System》课程教学资源(PPT课件)第四章 分布式进程和处理机管理(分布式处理机分配算法).ppt
- 清华大学:ICCV 2015 RIDE:Reversal Invariant Descriptor Enhancement.pptx
- 中国人民大学:Similarity Measures in Deep Web Data Integration.ppt
- 《数据结构》课程教学资源:课程PPT教学课件:绪论(数据结构讨论的范畴、基本概念、算法和算法的量度).ppt
- 《计算机组装与维修》课程教学资源(PPT课件讲稿)第二章 计算机系统维护维修工具使用.ppt
- 东南大学计算机学院:《操作系统概念 OPERATING SYSTEM CONCEPTS》课程教学资源(PPT课件)Operating-System Structures.ppt
- 《数字图像处理 Digital Image Processing》课程教学资源(PPT课件讲稿)第2章 图像分析.ppt
- 《EDA技术》实用教程(PPT讲稿)第5章 QuartusII 应用向导.ppt
- 香港浸会大学:《Data Communications and Networking》课程教学资源(PPT讲稿)Chapter 4 Transmission Media.ppt
- 北京大学:《搜索引擎 Search Engines》课程教学资源(PPT讲稿)Evaluating Search Engines(Search Engines Information Retrieval in Practice).ppt
- 西安电子科技大学:《8086CPU 指令系统》课程教学资源(PPT课件讲稿,共五部分,王晓甜).pptx
- 北京师范大学网络教育:《计算机应用基础》课程教学资源(PPT讲稿)第8章 计算机安全、第9章 多媒体技术.pptx
- 沈阳理工大学:《Java程序设计基础》课程教学资源(PPT课件讲稿)第1章 创建Java开发环境.ppt