`

内存管理内幕阅读笔记

 
阅读更多

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),以便程序在常规内存被耗尽时仍可以恢复。
  • 有非常易于使用的标准实现。

池式内存的缺点是:

  • 内存池只适用于操作可以分阶段的程序。
  • 内存池通常不能与第三方库很好地合作。
  • 如果程序的结构发生变化,则不得不修改内存池,这可能会导致内存管理系统的重新设计。
  • 您必须记住需要从哪个池进行分配。另外,如果在这里出错,就很难捕获该内存池。
 
分享到:
评论

相关推荐

    COM技术内幕笔记

    ### COM技术内幕笔记知识点解析 #### 一、组件与COM技术概述 - **定义与优点**:组件对象模型(COM)是一套规范,指导如何构建组件和应用这些组件于应用程序的构造中。组件的优势包括时间发展适应性、应用程序定制化...

    VC++技术内幕学习笔记

    这份笔记可能是基于《VC++技术内幕》这本书的阅读和实践积累,作者强调在研读此书之前,最好具备一定的Windows 32位编程基础,尤其是能够运用纯SDK(Software Development Kit)编写简单的应用程序。 VC++是...

    vc++技术内幕学习笔记

    更进一步,笔记可能会涉及VC++的高级话题,如多线程编程、内存管理、性能优化、动态链接库(DLL)的创建和使用、以及Windows服务的开发。这些内容将帮助开发者解决复杂的问题,提高程序的效率和稳定性。 最后,笔记...

    VC++技术内幕全程笔记.

    《VC++技术内幕全程笔记》一书,由潘爱民和王国印翻译,清华大学出版社出版的第四版,被誉为深入理解VC++技术的核心资料。本书不仅仅是一份简单的学习笔记,更是一份珍贵的参考资料,旨在帮助读者全面掌握VC++的内部...

    VC学习内幕,学习笔记

    技术内幕》学习笔记.chm文件将是你学习过程中的重要参考资料,它可能包含了详细的教程、示例代码和常见问题解答,可以帮助你在VC学习之路上更进一步。记得时常查阅并动手实践,理论结合实际,才能真正掌握这项技术。

    vc++技术内幕第四版(清华版)学习笔记

    此外,还详细介绍了内存管理,包括动态内存分配、内存泄漏检测以及智能指针的使用,帮助开发者避免常见的内存问题。 四、STL(Standard Template Library) 深入探讨了C++标准模板库,包括容器(如vector、list、...

    VC++技术内幕 学习笔记

    【VC++技术内幕】是一本深入探讨VC++编程的书籍,涵盖了从基础的Windows编程模式到高级主题如GDI和DLL。以下是对标题和描述中所述知识点的详细说明: 1. **Windows编程模式**:Windows应用程序的核心是WinMain函数...

    『VC++技术内幕』学习笔记.rar_VC 学习_VC技术内幕_Vc_chm_vc++

    5. **内存管理**:深入理解C++的动态内存分配,包括new、delete操作符,智能指针,以及内存泄漏的预防。 6. **多线程编程**:在Windows平台上创建和管理线程,同步机制如临界区、事件、信号量和互斥体的使用。 7. ...

    S3C2410 bootloader vivi阅读笔记

    同时,掌握嵌入式系统的基本概念,如中断、内存管理、存储设备操作等,也有助于深入理解Bootloader的工作原理。 通过阅读《嵌入式系统 Boot Loader 技术内幕》等书籍,并结合Vivi的源码,开发者可以学习到...

    VC++技术内幕(第四版)笔记

    六、内存管理 在VC++中,了解内存分配和释放是防止内存泄漏的关键。笔记会讨论new和delete操作符,以及智能指针的使用,如auto_ptr、unique_ptr和shared_ptr。 七、预处理器和宏 预处理器是C++编译过程的一部分,...

    COM技术内幕(读书笔记版)

    COM接口是COM组件与外界交互的主要方式,它是一个包含函数指针数组的内存结构。通过接口,用户可以调用组件提供的服务,而不必了解组件的具体实现细节。一个组件可以实现多个接口,以提供多种功能。接口具有二进制...

    Microsoft SQL Server 2005技术内幕(一): 查询、调整和优化 及 存储引擎

    7. **内存管理**:SQL Server 2005有一个专门的内存管理器,负责分配和释放内存资源,合理配置内存可以帮助提升性能。 通过深入学习和实践这些知识点,开发者和DBA能够更好地理解和掌握SQL Server 2005的内在工作...

    C#技术内幕笔记!!

    C#是一种面向对象的编程语言,它由微软公司开发,广泛应用于Windows平台的应用程序开发,尤其是...在实际编程过程中,还需要考虑更多的细节,如错误处理、异常处理、多线程、内存管理等,这些都是C#开发者必备的技能。

    VC++技术内幕(第四版)笔记

    ### VC++技术内幕(第四版)笔记核心知识点详解 #### 第一章:Windows应用程序与Visual C++ 1. **WinMain函数的重要性** - **功能概述**:在Windows应用程序开发中,`WinMain`函数是必不可少的核心组件。它是程序...

    oracle性能优化技术内幕

    Oracle性能优化技术内幕是数据库管理员和开发人员关注的重要领域,因为高效的Oracle数据库性能直接影响到企业的业务运行速度和用户体验。这份资料包含多个方面的内容,旨在帮助读者深入理解并掌握Oracle性能优化的...

    MySQL大佬姜承尧47完整课程笔记,进阶涨薪必看,内含MySQL配置文件

    姜承尧作为知名的MySQL专家,他的课程深受业界欢迎,尤其对于想要提升MySQL技能的DBA(数据库管理员)来说,他的课程笔记无疑是进阶涨薪的宝贵参考资料。 首先,我们要理解MySQL的基本概念。MySQL是一种开源、免费...

    visual c++技术内幕光盘内容

    这些源代码涵盖了从基本的语法到高级特性的各种应用,如MFC(Microsoft Foundation Classes)库的使用、Windows API的调用、多线程编程、内存管理等。通过实际操作和调试这些代码,读者能够更好地理解C++编程的实际...

    VC++技术内幕(windows编程篇)

    性能优化则涉及到代码效率、内存管理和算法优化等方面。 总之,《VC++技术内幕(Windows编程篇)》的学习笔记将带你深入理解Windows编程的各个方面,从基本概念到高级技术,全面提升你的Windows应用开发能力。这份...

    vc学习笔记

    5. **内存管理**:讨论动态内存分配(new和delete操作符)和内存泄漏的概念,以及如何避免内存问题。 6. **异常处理**:介绍C++的异常处理机制,如何使用try、catch块来捕获和处理程序运行时可能出现的错误。 7. *...

Global site tag (gtag.js) - Google Analytics