动态内存分配

✍ dations ◷ 2025-04-27 08:48:58 #内存管理

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

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

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

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

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

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

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

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

相关

  • 电镀电镀(英文:Electroplating)是利用电解的原理将导电体铺上一层金属的方法。除了导电体以外,电镀亦可用于经过特殊处理的塑胶上。电镀有分镀铬、镀锌、镀铜、镀镍等。电镀的主要
  • bspan style=color:yellow;②/span/b阿克罗蒂里和泽凯利亚主权基地区(英语:Sovereign Base Areas of Akrotiri and Dhekelia)是两个位于地中海极东部岛屿塞浦路斯上的英国特殊属地,共同组成了主权基地区,其中阿克罗
  • 多核糖体多核糖体(Polysome)是一束或一组核糖体。这些核糖体可以附着在mRNA上,同时进行转译,使得蛋白质的转译速度大大加快。这一现象最早由 Jonathan Warner, Paul Knopf 和 亚历山大
  • ǁ不送气边搭嘴音(Tenuis lateral click)是一种辅音,主要出现于南非的一些口语中。其中,术语“不送气”(tenuis)又称“无声爆破音”,特指清音、不送气(unaspirated)、未颚音化、未声门
  • span class=nowrapIn(NOsub3/sub)sub3/sub/span硝酸铟是一种无机化合物,化学式为In(NO3)3,存在无水物、一水物、三水物等。硝酸铟的水合物可以通过铟或氧化铟和硝酸的反应制备。无水硝酸铟通过氯化铟(III)和五氧化二氮反应
  • 菲尔·柯林斯菲利浦·大卫·查尔斯·柯林斯(英语:Phillip David Charles Collins,1951年1月30日-)生于伦敦,菲尔·柯林斯(Phil Collins)则是他广为人之的名字,是当代英国摇滚乐与流行音乐的乐手。
  • 打击伊斯兰国在叙利亚和伊拉克: 联合特遣队-坚决行动 美国 (也在利比亚和喀麦隆打击伊斯兰国)  澳大利亚  加拿大(2014–17)  比利时(2014–17)  丹麦(2014–16)  瑞典  法国  德国  意
  • 排卵试纸排卵试纸(Ovulation prediction kit)是一种辅助妇女预测排卵时间(生育能力测试)的工具,通常提供给积极尝试怀孕的女性,也有女性用来避孕。其量测的结果可提供排卵日期,做为女性参考
  • 酒精浓度酒精浓度(英语:Alcohol by volume,缩写为ABV,abv,或alc/vol),又译为酒精含量,酒精度、酒精量,酒精度数,酒精体积分数,酒精体积百分数,是一种标准计算方式,用来计算在一定体积的酒精饮料中
  • 年货年货是过年前买一些好的食品,而采购过程则称为办年货,例如贵价的鲍、参、翅、肚用来煮一顿好的饭菜,来慰劳一下辛苦工作了一年的日子,庆祝新年的来临。有些地方的人会买糖果瓜子