动态内存分配

✍ dations ◷ 2025-10-09 19:03:28 #内存管理

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

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

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

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

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

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

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

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

相关

  • 新发传染病新兴传染病一般定义是近二十年以来,新出现在人类身上的传染病,而该疾病的发生率除了有快速增加的趋势,且在地理分布上有扩张的情况,甚至发展出新的抗药性机制等 ,都可以算是新兴
  • NaVOsub3/sub偏钒酸钠是一种无机化合物,化学式为NaVO3。无色棱柱状单斜结晶,溶于水。在自然界以少见的付穆水钒钠石(metamunirite,无水物)和水钒钠矿(munirite,二水物)存在。由五氧化二钒溶于氢
  • 超级月亮超级月亮是满月(或新月)与近点月同时发生的近点朔望月。这是描述月球在椭圆轨道上绕着地球公转,行经近地点之时,同时又在日地联线上的通俗名词,并非天文学的专业术语。此种结合的
  • 瑞士尊严机构Dignitas,中文通常翻译为尊严,是一家位于瑞士、专门帮助罹患绝症和有严重身心理疾病的患者,在合格医师和护士的协助下安乐死的机构。他们于苏黎世已经帮助了超过1000人。此外,应
  • 鸟飞鸟飞(英语:bird flight)是指世界上多数的鸟类以飞行为主要形式的移动力。飞行可以方便鸟类捕食、同时免于被其他动物猎捕。此文章所讨论的事鸟类飞行的原理,特别着重于鸟类风行
  • 川村竹治川村竹治(かわむら たけじ,1871年7月17日-1955年9月8日),号亚洲,日本江刺县鹿角郡花轮村(今秋田县鹿角市)人,南满洲铁道株式会社社长、台湾总督、司法大臣。日本帝国秋田县人。1897年
  • 杨实杨实(?-?),字真卿,是第五任播州土司,其活跃年代位于五代末年至北宋初年。杨实是第四代土司杨三公的次子。杨三公死后,杨实的长兄杨宝应该继承土司之位。但杨宝自认为才能不如杨实,遂让
  • 弗里德里希·威廉 (霍亨索伦)霍亨索伦亲王弗里德里希(德语:Friedrich Wilhelm Fürst von Hohenzollern;1924年2月3日-2010年9月16日),出生于乌姆基希,是霍亨索伦-锡格马林根王朝的首领。
  • 苏珊·德·波旁苏珊·德·波旁,波旁女公爵(Suzanne, Duchess of Bourbon,1491年5月10日-1521年4月28日),波旁家族的代表人物之一,亦是奥弗涅女公爵,与丈夫夏尔三世一同管理波旁公国及奥弗涅公国。
  • 翟銮翟銮(1477年-1546年),字仲鸣,号石门,直隶京师人,锦衣卫籍,祖籍山东诸城,明朝政治人物,官至内阁首辅。曾祖父为锦衣卫校尉,翟銮遂寄籍顺天府。弘治十八年(1505年)登进士,授庶吉士,改翰林院编