动态内存分配

✍ dations ◷ 2024-12-22 16:37:39 #内存管理

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

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

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

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

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

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

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

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

相关

  • 区室细胞区室(英语:cellular compartment,亦称为细胞腔隙)是细胞生物学中使用的名词,包括所有真核细胞的细胞质中封闭的部分,它们多被单层或双层的磷脂所包围。绝大多数的细胞器均被视
  • 斑蚊黑斑蚊是伊蚊属(学名:Aedes)昆虫的通称,又称伊蚊、斑蚊或艾迪斯蚊,属于蚊科库蚊亚科,有很多种类分布在世界各地。此类型蚊虫通常活跃于傍晚和清晨时分,其中白线斑蚊及埃及斑蚊是登
  • 勃兰登堡级巡防舰Nordseewerke(英语:Nordseewerke) Bremer Vulkan(英语:Bremer Vulkan)勃兰登堡级巡防舰,为德国海军的巡防舰,属于MEKO型的一种,日后德国亦以勃兰登堡级的设计衍生出萨克森级巡防舰。
  • 深海生物聚落深海生物聚落是指栖息于深海的生物群集(英语:community (ecology))。由于技术和成本上的限制,目前关于深海生物相关的资讯仍付之阙如。深海生物有相当严酷的生存压力,例如高水压
  • 山姆·休斯敦山姆·休斯敦国家森林(英语:Sam Houston National Forest)是德克萨斯州的四座国家森林之一,位于休斯顿以北50英里(80千米)处。山姆·休斯敦国家森林与其他完全位于德克萨斯州境内
  • 世祖朝鲜世祖(朝鲜语:조선 세조/朝鮮 世祖 Joseon Sejo;1417年11月7日-1468年9月23日),即朝鲜世祖惠庄大王、朝鲜惠庄国王,朝鲜王朝的第7代国王,名讳李瑈(朝鲜语:이유/李瑈 Yi Yu),字粹之(朝
  • 放射线放射线可以指:
  • 氧化镧氧化镧是镧(III)的氧化物,分子式为La2O3,室温下为白色粉末。氧化镧可溶于酸生成镧盐。氧化镧通常利用草酸镧或者碳酸镧的热分解制备。实验室可以用可溶性的镧盐和碱反应制备氢氧
  • 弗朗西斯·特纳·帕尔格雷夫弗朗西斯·特纳·帕尔格雷夫(Francis Turner Palgrave,1824年9月28日-1897年10月24日)是英国诗人和评论家。生于诺福克郡大雅茅斯,就学于牛津大学。曾任牛津大学教育系职员,后于18
  • 大臭鼠效应大臭鼠效应(英语:Woozle Effect),又称引证证据(英语:Evidence by Citation)、大臭鼠(英语:Woozle),是指反复利用缺乏证据的先前出版物,让个人、团体和公众误以为或相信证据存在,而这种非