内存管理器(一)简单分配器

来源:互联网 发布:达内大数据课程怎么样 编辑:程序博客网 时间:2024/05/22 12:10

前言

之前,有学长(学长博客强烈推荐:http://my.csdn.net/wwh578867817)做了内存管理的主题沙龙,自己以前也看过一些内存管理方面的东西,所以最近想做一个内存管理器,其实最终实现主要是以函数的形式表达。废话不多说,路线基本如下:

学习路线

1.内存管理器(一)简单分配器(需求)
2.内存管理器(二)边界标识法
3.内存管理器(三)使用边界标识法实现分配器
4.内存管理器(四) 伙伴算法(现代主流内存管理方法)
5.内存管理器(五) Glibc malloc 实现(一)
6.内存管理器(六) Glibc malloc 实现(二)
7.内存管理器(七) Glibc malloc 实现(三)
8.内存管理器(八) Linux 内核内存管理–物理内存管理 (一)
9.内存管理器(九) Linux 内核内存管理–物理内存管理 (二)
10.内存管理器(十)Linux 内核内存管理–虚拟地址管理(一)
11.内存管理器(十一)Linux内核内存管理–虚拟地址管理(二)

简单分配器

分配器的要求和目标

这个分配器是学习于《CSAPP》中第九章‘虚拟存储器‘ 的一个例子。
分配器的要求和目标:
1.处理任意请求序列
2.立即响应请求
3.只使用堆
4.内存必须是对齐的
5.不能修改已经分配的块

分配器的目标:
1.最大化吞吐率:假设每一秒这个程序可以分配100次,或者可以释放100次,那么这个程序的吞吐率就是每秒200次。
2.最大存储器利用率:一般的程序员从来不多关心虚拟存储器这个的东西的大小,其实这个东西受制于平台,交换空间,内存。所以这个空间也是很宝贵的,如何使它的利用率最大也是我们需要考虑的一个重要课题。
3.平衡吞吐率与利用率。

其他影响的因素:
碎片:
这里的碎片有两方面:
1.内部碎片
因为,内存需要对齐,但是我们在请求空间的时候是任意的大小,其结果很可能不是4或8的整数倍,一旦我们请求一个空间,它小与我们的分配块大小,就会发生一部分空间分配给了我们但是我们却没有使用的情况。这部分空间我们就叫它内部碎片。
2.外部碎片
空闲的存储器合计起来可以满足我们一个分配请求,但是却没有一个独立的块可以满足我们要求,只能向内核请求额外的存储器时,原来剩下的空间大小我们就称之为外部碎片。

0 0
原创粉丝点击