http://www.ibm.com/developerworks/cn/linux/l-memory/
基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用:
-
brk:
brk()
是一个非常简单的系统调用。 还记得系统中断点吗?该位置是进程映射的内存边界。brk()
只是简单地 将这个位置向前或者向后移动,就可以向进程添加内存或者从进程取走内存。 -
mmap:
mmap()
,或者说是“内存映像”,类似于brk()
,但是更为灵活。首先,它可以映射任何位置的内存, 而不单单只局限于进程。其次,它不仅可以将虚拟地址映射到物理的 RAM 或者 swap,它还可以将 它们映射到文件和文件位置,这样,读写内存将对文件中的数据进行读写。不过,在这里,我们只关心mmap
向进程添加被映射的内存的能力。munmap()
所做的事情与mmap()
相反。
在设计一个分配程序时, 要面临许多需要折衷的选择,其中包括:
- 分配的速度。
- 回收的速度。
- 有线程的环境的行为。
- 内存将要被用光时的行为。
- 局部缓存。
- 簿记(Bookkeeping)内存开销。
- 虚拟内存环境中的行为。
- 小的或者大的对象。
- 实时保证。
使用池式内存分配的益处如下所示:
- 应用程序可以简单地管理内存。
- 内存分配和回收更快,因为每次都是在一个池中完成的。分配可以在 O(1) 时间内完成,释放内存池所需时间也差不多(实际上是 O(n) 时间,不过在大部分情况下会除以一个大的因数,使其变成 O(1))。
- 可以预先分配错误处理池(Error-handling pools),以便程序在常规内存被耗尽时仍可以恢复。
- 有非常易于使用的标准实现。
池式内存的缺点是:
- 内存池只适用于操作可以分阶段的程序。
- 内存池通常不能与第三方库很好地合作。
- 如果程序的结构发生变化,则不得不修改内存池,这可能会导致内存管理系统的重新设计。
- 您必须记住需要从哪个池进行分配。另外,如果在这里出错,就很难捕获该内存池。
相关推荐
《深入理解LINUX内存管理》学习笔记a.PDF
个人多年学习并总结的有关Linux内存管理的笔记,希望对Linux内核爱好者有所帮助!
《深入理解LINUX内存管理》学习笔记c.PDF
候,困惑在内存管理的实现上,阅读这本书,希望能有利于自己的OS的编写。 4,克服惰性,多读书,希望一天能阅读5页,争取半年内阅读完这本原版700 多页的巨著。 不足: 我不可能完全理解LINUX内存管理的精髓,肯定有...
《深入理解LINUX内存管理》学习笔记b.PDF
深入理解Linux内核-内存篇,阅读笔记
自己总结的内存管理笔记,偶尔拿起来回顾回顾
WIN32内存管理笔记,对WIN32内存管理的概念,内存管理的函数进行介绍。
C++内存管理机制笔记
Linux内存管理笔记
《深入理解LINUX内存管理》学习笔记,亲生体会,详细记录
内存管理笔记.md
本文首先阐述了内存管理在系统优化中的重要性,然后介绍了C++中的动态内存管理和智能指针使用。接着讲解了并发编程中的原子操作与互斥锁来实现线程安全。最后从局部性原理和内存对齐等方面介绍了性能优化思想,并给出...
COM技术内幕笔记 ,介绍的很详细
《深入理解linux内存管理》学习笔记 Linux 高阶学习
《Spring技术内幕》学习笔记1——IoC容器体系结构 《Spring技术内幕》学习笔记2——IoC定位Bean定义资源 《Spring技术内幕》学习笔记3——IoC容器载入Bean定义资源文件 《Spring技术内幕》学习笔记4——IoC容器...
Java学习笔记_内存管理.rarJava学习笔记_内存管理.rar
本课件首先介绍了C语言中的内存管理知识,包括堆栈概念、动态内存分配函数及内存泄漏等问题,并给出了示例代码。然后详细讲解了C语言中的结构体与联合的定义、访问及嵌套使用,每部分都配有代码实例说明。内容结构清晰,...