动态内存分配

✍ dations ◷ 2025-07-23 09:56:04 #内存管理

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

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

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

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

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

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

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

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

相关

  • 导电电传导(英语:electrical conduction)是指介质内,载电荷的粒子的运动。称这些粒子为电荷载子。它们的运动形成了电流。这运动可能是因为感受到电场的作用而产生的,或是因为载子分
  • 酗酒厌食症酗酒厌食症(Drunkorexia),又称为豪饮厌食症。是一种结合了强迫性节食甚至禁食,却同时酗酒的疾病。这是一种极端的体重控制方式,患有酗酒厌食症者通常在大量饮用含酒精的饮料后,为
  • 学习理论学习理论是教育学和教育心理学的一门分支学科,描述或说明人类和动物学习的类型、过程,以及有效学习的条件。学习理论主要分为四大理论体系:从20世纪60年代末以来,前两大主义体系
  • 黔灵山公园黔灵山公园位于贵州省贵阳市主城区的西北部,是贵阳市内主要风景点之一。占地426公顷,是国内少有的城区大型公园。公园依黔灵山而建。公园内部森林茂密、风景秀丽。尤其是黔灵
  • 卡扎尔王朝君主专制 (1785–1906) 卡扎尔王朝(Qājār dynasty,1794年—1925年),也译作恺加王朝。伊朗北部卡扎尔部落(现代属于土库曼人)首领阿迦·穆罕默德·汗建立的王朝。阿迦·穆罕默德·
  • 亨利·托马斯亨利·托马斯(英语:Henry Thomas,1971年9月9日-)是美国的一位演员和音乐人。他出演过超过40部电影,其中最著名的作品是史提芬·史匹堡的电影《ET外星人》,而他最近在《阴宅异事》中
  • 詹姆士·梳士巴利詹姆士·梳士巴利(英语:James Henry Salisbury, M.D. ,1823年1月12日-1905年9月23日是一个美国医师,索尔兹伯里牛肉饼的发明者。梳士巴利1823年出生于纽约州。在1844年,他在伦斯勒
  • 柔情盖天《柔情盖天》(英语:)即依据美国作家杰克·寇帝斯(Jack Curtis)所撰写的小说《柔情盖天》为基础,再进行改编的电影作品。另外,本片也是早期在美国知名度不高的罗素·克劳经莎朗·斯
  • 代码211《代码211》(英语:)是一部2018年美国抢劫(英语:Heist film)动作片,由耶克·沙克莱顿(英语:York Shackleton)执导并与约翰·李巴斯(John Rebus)共同撰写剧本。其主演包括尼古拉斯·凯奇、
  • 麦斯卡拉姆杜格麦斯卡拉姆杜格(约公元前27世纪后期在位)(英语:Meskalamdug)乌尔国王。其墓被莱昂纳多·伍利爵士发现并发掘。出土了一盏贝壳形状的金油灯和一盏精致的金头盔。