动态内存分配

✍ dations ◷ 2024-09-20 10:57:41 #内存管理

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

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

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

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

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

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

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

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

相关

  • 建材建筑材料是指用于土木工程的各种材料的总称,简称“建材”。狭义上的建材是指用于土建工程的材料,如钢、沙石、玻璃、水泥、涂料等,通常将水泥、钢材和沙石称为一般建筑工程的三
  • 硫酸锌硫酸锌(化学式:ZnSO4)是最重要的锌盐之一,为无色斜方晶体或白色粉末,其七水合物(ZnSO4·7H2O)俗称皓矾,是一种天然矿物。硫酸锌是无色或白色斜方晶体或粉末,易溶于水,水溶液呈酸性,溶于
  • 三嗪三嗪(Triazine)是含有三个氮原子的六元杂环化合物,分子式为C3H3N3,有三种异构体:1,2,3-及1,2,4-三嗪均未见其单独存在,但衍生物都已制得。1,2,3-三嗪可由2-叠氮基环丙烯类化合物热
  • 明思宗明思宗朱由检(1611年2月6日-1644年4月25日),或称崇祯帝,明朝第17代、末代皇帝。思宗为明光宗第五子,明熹宗异母弟。五岁时,其母刘氏获罪,被时为太子的光宗下令杖杀,朱由检交由庶母西
  • 三门峡市三门峡市,古称陕州,是中华人民共和国河南省下辖的地级市,位于河南省西部。市境东接洛阳市,南界南阳市,西与陕西省渭南市、商洛市相邻,北隔黄河与山西省运城市相望。地处豫西山区和
  • 万建中万建中可以指:
  • 白血球减少症白细胞减少症是指外周血液中白细胞数持续低于4×109/升时的症状。嗜中性粒细胞减少症是白细胞减少症的一种。顾名思义,这种病的表现是嗜中性粒细胞(白细胞中最常见的种类)的数
  • 弗雷德里克·埃德温·丘奇弗雷德里克·埃德温·丘奇(Frederic Edwin Church,1836年5月4日-1900年4月7日)是一位美国风景画家,他是托马斯·科尔的学生,也是第二代哈德逊河派的中心人物之一。他的作品主要以
  • 丹·布卡廷斯基丹·布卡廷斯基(英语:Dan Bucatinsky,1965年9月22日-)是美国的一位演员、作家和制作人。他在电视剧丑闻中出演James Novak角色。他出生在纽约的一个犹太人家庭。
  • 卡里格莱恩卡里格莱恩(英语:Carrigaline,爱尔兰语:Carraig Uí Leighin)是爱尔兰共和国的一座城市,位于科克郡科克以南14公里处。卡里格莱恩近年来快速发展,由一个只有数百人的村庄发展为一座