内存管理器(一)简单分配器
来源:互联网 发布:达内大数据课程怎么样 编辑:程序博客网 时间: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.外部碎片
空闲的存储器合计起来可以满足我们一个分配请求,但是却没有一个独立的块可以满足我们要求,只能向内核请求额外的存储器时,原来剩下的空间大小我们就称之为外部碎片。
- 内存管理器(一)简单分配器
- 内存管理器(四) 伙伴算法及分配器原理实现
- 简单内存分配器
- STL中的内存分配器 (一)
- ACE内存分配器一
- 内存分配器一
- 内存管理器(三)使用边界标识法实现内存分配器
- 简单的自定义内存分配器
- [Linux内存]slab分配器学习笔记(一)--概念
- [Linux内存]slub分配器学习笔记(一)--基本概念
- 操作系统内存管理与简单分配器实现
- linux内存模型之bootmem分配器<一>
- Linux内存管理 Slab分配器(一:概述)
- 内存分配器
- 内存分配器
- 内存分配器
- Android 简单的内存管理器
- C++中的allocator类(内存分配器)
- Hadoop学习笔记———《MultipleOutputs———将结果输出到指定的多个文件或文件夹》
- 【C++】利用析构统计函数运行时间
- 第四周项目3 单链表的应用3
- cpu 调频 温度 ondemand
- 开发
- 内存管理器(一)简单分配器
- (七)Spark源码理解之TaskScheduler----part6
- ld returned 1 exit status这类问题如何处理
- 第7周—项目4 队列数组
- SOCKET API和TCP STATE的对应关系__三次握手(listen,accept,connect)__四次挥手close及TCP延迟确认(调用一次setsockopt函数,设置TCP_QUI
- Ubuntu报错:sudo 无法解析的主机
- Mongodb Cluster
- 动态拼接html
- 解决Unity3D中“There is no 'Renderer' attached to the game object”问题