fbpx
维基百科

动态内存分配

计算机科学中, 动态内存分配(Dynamic memory allocation)又称为堆内存分配,是指计算机程序运行期中分配使用内存。它可以当成是一种分配有限内存资源所有权的方法。

动态分配的内存在被程序员明确释放或被垃圾回收之前一直有效。与静态内存分配的区别在于没有一个固定的生存期。这样被分配的对象称之为有一个「动态生存期」。

细节 编辑

分配过程包括寻找一块足够大未被使用的内存。

  • 分配过程当中的问题
    • 内部和外部碎片
      • 减少碎片需要特别处理,从而导致更复杂的实现(参考 算法效率)。
    • 分配器的元数据需要占用额外的空间。
      • 尝试组块来减轻这个效应。

通常,内存是从一个被称为(heap)的内存池中分配出来的。高级语言封装了内存地址的概念,内存通常是通过指针来间接访问的。分配算法经常将组织分配释放组块等操作封装成抽象的接口供上层函数调用。

效率 编辑

堆分配的效率与分配算法的优劣关系很大。

实现 编辑

定长分配 编辑

定长分配通常被称为内存池分配,使用一个链表来保存空闲内存块信息(通常每块内存大小相同)。这种方法在简单的嵌入式系统中效果很好。

伙伴系统 编辑

伙伴記憶體分配英语Buddy memory allocation方式下,内存从一个2的N次幂大的内存块中分配。当内存块比要分配的长度大两倍以上,内存块平均分裂成两块。选中其中一半,重复这个过程(检查长度,满足条件则分裂)直到内存块刚好等于需要的长度。

所有的块信息保存在一个排序过的链表或者二叉树中。当一个块被释放的时候与他的相邻块进行比较。如果他们都被释放,就合并成一个大块放进更大的一个块列表 中。每当分配结束,分配器会从尽量小的块重新开始分配,以避免产生不必要的碎片。

参见 编辑

外部链接 编辑

  • Sample bit-mapped arena memory allocator in C (页面存档备份,存于互联网档案馆
  • Slides for knowing about Dynamic memory allocation(页面存档备份,存于互联网档案馆
  • Inside A Storage Allocator (页面存档备份,存于互联网档案馆

补充阅读 编辑

参考文献 编辑

  • Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Section 2.5: Dynamic Storage Allocation, pp. 435–456.
  • on OSDEV Community
  • Wilson, P.R.; Johnstone, M.S.; Neely, M.; Boles, D. Dynamic Storage Allocation: A Survey and Critical Review. Memory Management: International Workshop, Iwmm'95, Kinross, Uk, September 27-29, 1995: Proceedings (Springer). 1995 [2008-01-06]. ISBN 9783540603689. 
  • Berger, E.D.; Zorn, B.G.; McKinley, K.S. Composing high-performance memory allocators. ACM SIGPLAN Notices. 2001, 36 (5): 114–124. doi:10.1145/381694. 
  • Berger, E.D.; Zorn, B.G.; McKinley, K.S. Reconsidering custom memory allocation. Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications. ACM Press New York, NY, USA: 1–12. 2002. 

动态内存分配, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 2011年8月21日, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討論頁, 在计算机科学中, dynamic, memory, allocation, 又称为堆内存分配, 是指计算机程序在运行期中分配使用内存, 它可以当成是一种分配有限内存资源所有权的方法, 动态分配的内存在被程序员明确释放或被垃圾回收之前一直有效, 与静态内存分配的区别在于没有一个固定的生存期, 这样被分配的对象称之为有一个, 动态生存期, 目录, 细节, 效率, 实现. 此條目需要精通或熟悉相关主题的编者参与及协助编辑 2011年8月21日 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 在计算机科学中 动态内存分配 Dynamic memory allocation 又称为堆内存分配 是指计算机程序在运行期中分配使用内存 它可以当成是一种分配有限内存资源所有权的方法 动态分配的内存在被程序员明确释放或被垃圾回收之前一直有效 与静态内存分配的区别在于没有一个固定的生存期 这样被分配的对象称之为有一个 动态生存期 目录 1 细节 2 效率 3 实现 3 1 定长分配 3 2 伙伴系统 4 参见 5 外部链接 6 补充阅读 7 参考文献细节 编辑分配过程包括寻找一块足够大未被使用的内存 分配过程当中的问题 内部和外部碎片 减少碎片需要特别处理 从而导致更复杂的实现 参考 算法效率 分配器的元数据需要占用额外的空间 尝试组块来减轻这个效应 通常 内存是从一个被称为堆 heap 的内存池中分配出来的 高级语言封装了内存地址的概念 内存通常是通过指针来间接访问的 分配算法经常将组织分配释放组块等操作封装成抽象的接口供上层函数调用 效率 编辑堆分配的效率与分配算法的优劣关系很大 实现 编辑定长分配 编辑 主条目 内存池 定长分配通常被称为内存池分配 使用一个链表来保存空闲内存块信息 通常每块内存大小相同 这种方法在简单的嵌入式系统中效果很好 伙伴系统 编辑 在伙伴記憶體分配 英语 Buddy memory allocation 方式下 内存从一个2的N次幂大的内存块中分配 当内存块比要分配的长度大两倍以上 内存块平均分裂成两块 选中其中一半 重复这个过程 检查长度 满足条件则分裂 直到内存块刚好等于需要的长度 所有的块信息保存在一个排序过的链表或者二叉树中 当一个块被释放的时候与他的相邻块进行比较 如果他们都被释放 就合并成一个大块放进更大的一个块列表 中 每当分配结束 分配器会从尽量小的块重新开始分配 以避免产生不必要的碎片 参见 编辑自动内存分配 動態陣列 英语 Dynamic array 垃圾回收 冒险指针 Heap溢位 英语 Heap overflow Hoard記億體配置器 英语 Hoard memory allocator Java虚拟机 heap a href C E5 8A A8 E6 80 81 E5 86 85 E5 AD 98 E5 88 86 E9 85 8D html title C动态内存分配 malloc a 内存池 span class ilh all data orig title mmap data lang code en data lang name 英语 data foreign title mmap span class ilh page mmap span span class noprint ilh comment span class ilh lang 英语 span span class ilh colon span span class ilh link span lang en dir auto mmap span span span span new C obstack 英语 obstack Slab分配 英语 Slab allocation SLOB 基于堆栈的内存分配外部链接 编辑Sample bit mapped arena memory allocator in C 页面存档备份 存于互联网档案馆 TLSF a constant time allocator for real time systems Slides for knowing about Dynamic memory allocation 页面存档备份 存于互联网档案馆 Inside A Storage Allocator 页面存档备份 存于互联网档案馆 补充阅读 编辑 Dynamic Storage Allocation A Survey and Critical Review 页面存档备份 存于互联网档案馆 Department of Computer Sciences University of Texas at Austin参考文献 编辑此條目已列出參考文獻 但因為沒有文內引註而使來源仍然不明 2009年9月 请加上合适的文內引註来改善这篇条目 Donald Knuth Fundamental Algorithms Third Edition Addison Wesley 1997 ISBN 0 201 89683 4 Section 2 5 Dynamic Storage Allocation pp 435 456 Simple Memory Allocation Algorithms on OSDEV Community Wilson P R Johnstone M S Neely M Boles D Dynamic Storage Allocation A Survey and Critical Review Memory Management International Workshop Iwmm 95 Kinross Uk September 27 29 1995 Proceedings Springer 1995 2008 01 06 ISBN 9783540603689 引文使用过时参数coauthors 帮助 Berger E D Zorn B G McKinley K S Composing high performance memory allocators ACM SIGPLAN Notices 2001 36 5 114 124 doi 10 1145 381694 引文使用过时参数coauthors 帮助 Berger E D Zorn B G McKinley K S Reconsidering custom memory allocation Proceedings of the 17th ACM SIGPLAN conference on Object oriented programming systems languages and applications ACM Press New York NY USA 1 12 2002 引文使用过时参数coauthors 帮助 取自 https zh wikipedia org w index php title 动态内存分配 amp oldid 75162732, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。