动态内存分配

✍ dations ◷ 2025-02-23 19:41:50 #内存管理

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

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

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

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

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

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

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

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

相关

  • 阿杰隆阿杰隆(阿拉伯语:عجلون‎是约旦的城镇,位于该国西北部,是阿杰隆省的首府,距离首都安曼76公里,海拔高度793米,该城镇有一处十二世纪城堡的遗址,2009年人口8,356。坐标:32°21′N
  • t̪θʼ齿挤喉塞擦音(Dental ejective affricate)是一种辅音,出现于一些口语中。齿挤喉塞擦音的国际音标(IPA)写作⟨t͡θʼ⟩,其等价的X-SAMPA音标则记作t-\T_>.齿挤喉塞擦音的特征包括:
  • 等足目见内文等足目(学名:Isopoda),又名等足类或等脚类,是一目甲壳类,其下包括了潮虫及球潮虫。等足目的化石纪录可以追溯至3亿年前的石炭纪。其学名是来自希腊文的“相等”及“脚”,故中
  • 破坏自己的海军舰队法国舰队土伦自沉事件是指发生于1942年11月27日,法国海军舰队在土伦(英语:Military port of Toulon)的集体自沉行动。当同盟国进攻法属北非后,维希法国主要人物弗朗索瓦·达尔朗
  • 安邦再也安邦(马来语:Ampang,也称安邦再也(Ampang Jaya)),是马来西亚雪兰莪州东北部的一个城市也是一个巫金,隶属于安邦市议会。其面积为143.5平方公里,人口于2010年为126,285。该市北临士
  • 科德尔·赫尔科德尔·赫尔(Cordell Hull,1871年10月2日-1955年7月23日),又称贺可德,美国政治家,第47任美国国务卿,1945年获诺贝尔和平奖。科德尔·赫尔出生于田纳西州皮克特县奥林普斯(Olympus,已
  • 约翰 (萨克森国王)约翰(Johann I,1801年12月12日-1873年10月29日),全名约翰·奈波穆克·玛丽亚·约瑟夫·安东·克萨韦尔·文森茨·阿洛伊·弗朗茨·德·保拉·斯坦尼斯瓦夫·博恩哈德·保罗·费利
  • 罗雷尔·路德威·德亚瑞司特罗雷尔·路德威·德亚瑞司特(德语:Heinrich Louis d'Arrest;1822年7月13日-1875年6月14日,又译达赫斯特),生于德国柏林,德国天文学家,普鲁士天文学家。当他还是学生的时候,他已经参与
  • 阿尔法:狼伴归途《阿尔法:狼伴归途》(英语:)是一部2018年美国历史剧情冒险片,由亚伯·休斯执导,丹尼尔·赛巴斯汀·温登豪普特(Daniele Sebastian Wiedenhaupt)撰写剧本,其主演包括柯蒂·斯密特-麦菲
  • 陈大年陈大年(1898年-1951年)福建福州胪雷人,海军上将陈绍宽族侄。字昌震。其早年毕业于福州英华书院。曾任福州邮务工会负责人、福州市总工会理事长、全国邮务总工会执行委员。1942年