动态内存分配

✍ dations ◷ 2025-09-08 23:33:10 #内存管理

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

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

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

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

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

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

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

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

相关

  • 菇类蕈类(注音:ㄒㄩㄣˋㄌㄟˋ;拼音:xùn lèi),通称蘑菇、菇类,是大型、高等的真菌,子实体通常肉眼可见。菌丝具横隔壁,将菌丝分隔成多细胞。不过,蘑菇一词通常是对蘑菇属(Agaricus)部分食
  • 鼻部 (部首)鼻部,为汉字索引中的部首之一,康熙字典214个部首中的第二百〇九个(十四划的则为第一个)。就繁体和简体中文中,鼻部归于十四划部首。鼻部大都以左方为部字。且无其他部首可用者将
  • 勒文海姆–斯科伦定理在数理逻辑中,经典 Löwenheim–Skolem 定理声称对于标识(signature)为 < C , F
  • 苏联共产党中央委员会第一书记苏联共产党中央委员会总书记(俄语:Генеральный секретарь ЦК КПСС)是苏联共产党领袖的头衔。在俄国历史上,这个职位往往是苏联最高领导人的代名词。
  • 案例法判例法(英语:case law),就是以个案判例的形式表现出的法律规范,以遵循先例的法律原则作为其建立的基础。简单而言,作为判例的先例对其后的案件具有法律约束力,可以成为日后法官审判
  • 埃雅克语埃雅克语(英语:Eyak language)是纳-德内语系的一种已灭绝的语言,有元音松紧对立现象。在最后一个该语言说话人Udach' Kuqax*a'a'ch'(英语:Marie Smith Jones)于2008年1月21日在安克
  • 制片公司制片公司,是指制作电影的公司,主要职能是提供影视制作服务,这些服务通常包括前期制作与后期制作。前期制作服务包括:场地勘景,演员试镜,摄制组班底组建,拍摄许可申请,设备租赁,拍摄后
  • 梦想之龙乐队梦想之龙乐队(英语:Imagine Dragons)是一个成立于美国内华达州拉斯维加斯的独立摇滚乐队。乐队主唱丹·雷诺斯是拉斯维加斯人,2008年时正在杨百翰大学就学,在那里遇到了鼓手Tolma
  • 八田亚矢子八田亚矢子(日语:八田 亜矢子/はった あやこ  */?,1984年10月4日-)是日本东京都八王子市出身的女性电视艺人。2004年度东京大学校园小姐。1984年10月4日出生于福冈县。3岁时与家
  • 刘焘 (明朝)刘焘(1511年-1598年),字仁甫,号带川,直隶沧州刘辛庄人,祖籍河南项城县。中国明朝官员,杰出的军事家,抗倭名将。顺天府乡试第四十七名,嘉靖十七年(1538年)进士。历任济南府推官、兵部职方