实验三:动态内存分配器的实现 助教:吴加禹、李佳伟、唐凯成 田成锦、汪睿、游翎璟
实验三:动态内存分配器的实现 助教:吴加禹、李佳伟、唐凯成 田成锦、汪睿、游翎璟
实验目的 学习内存管理模型与其数据结构 使用显示空闲链表实现一个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);