动态内存分配

✍ dations ◷ 2025-11-01 17:49:44 #内存管理

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

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

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

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

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

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

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

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

相关

  • R5P核糖-5-磷酸(英语:Ribose 5-phosphate)是磷酸戊糖途径的中间体和产物。核糖-5-磷酸是磷酸戊糖途径氧化阶段的最终产物,由核酮糖-5-磷酸异构化而来,根据机体的状态,核糖-5-磷酸也能
  • NaOH氢氧化钠,又称烧碱和苛性钠(sodium hydroxide;lye and caustic soda),化学式为NaOH,是一种具有高腐蚀性的强碱,一般为白色片状或颗粒,能溶于水生成碱性溶液,另也能溶解于甲醇及乙醇。
  • 邮政博物馆邮政博物馆(英语:Postal Museum),简称邮博馆,是1965年12月1日中华民国交通部邮政总局成立的博物馆,1966年3月20日(即“中华邮政70周年纪念日”)正式对外开放。创始的邮政博物馆,是利
  • 查尔斯·古德伊尔查尔斯·古德伊尔(英语:Charles Goodyear,1800年12月29日-1860年7月1日)生于美国康乃狄克州纽黑文,美国商人,硫化橡胶发明者。逝世于纽约市。古德伊尔致力于发明化学技术来制造柔韧
  • 国际足联国际足球联合会(法语:Fédération Internationale de Football Association;英语:International Federation of Association Football),简称国际足联(FIFA),是管理英式足球、室内五
  • 水西车辆基地水西车辆基地(朝鲜语:수서차량사업소/水西車輛事業所  */?)是首尔交通公社位于首尔江南区的一个车辆段,在首都圈电铁3号线和盆唐线附近。这个车辆段主要用于首都圈电铁3号线的3
  • 第131届国际奥委会全体会议第130届国际奥委会全体会议于2017年9月13日至9月17日在秘鲁利马召开。在第131届IOC会议期间选举了2024年夏季奥运会和2028夏季奥运会的主办城市。2024年、2028年夏季奥林匹
  • 惯习惯习(Custom/Convention)是为社会所共识的,被规定的或是被广泛接受的一种习俗、规定或社会性的规范。有时,固定类型的规则或惯习将会成为法律。制定规范的法律有时会将惯习正式
  • 沃尔特·皮金沃尔特·皮金(英语:Walter Pidgeon,1897年9月23日-1984年9月25日)是一名出生于加拿大的演员。他曾经两次被提名为奥斯卡最佳男主角并且在好莱坞星光大道拥有一颗属于自己的星形徽
  • 阿尔贝特·萨罗阿尔贝-皮埃尔·萨罗(Albert-Pierre Sarraut,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode",