动态内存分配

✍ dations ◷ 2025-06-30 20:26:15 #内存管理

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

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

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

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

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

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

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

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

相关

  • 伊本·巴哲阿布·贝克尔·穆罕默德·本·叶海亚·本·萨伊格(阿拉伯文:أبو بكر محمد بن يحيى بن الصائغ‎)常被称为伊本·巴哲(阿拉伯文:ابن باجة‎),是中世
  • 近音近音(英语:approximants; approximant consonant,前称无擦通音)在语音学中是指一类介乎元音和辅音的声音。发近音时,两个发音部位彼此靠拢,组成声腔并且收窄,但仍然有足够空间予气
  • 周巢尘周巢尘(1937年11月1日-),中国计算机软件专家,华东师范大学软件学院名誉院长。原籍江苏南汇,生于上海。1958年毕业于北京大学数学力学系。1967年研究生毕业于中国科学院计算技术研
  • 澳币澳大利亚元(英语:Australian Dollar,简写A$或AUD),是澳大利亚通货的基本单位,一元有100分。澳大利亚元在外汇市场上,目前为交易量世界第五大的流通货币;居美元、欧元、日元、英镑之
  • 塞姆南塞姆南省(波斯语:استان سمنان)是伊朗三十一个省份之一。面积96,816公里,在所有省份中排行第6。人口约589,512(2005年数据);首府位于塞姆南市。塞姆南省位于伊朗北部;北
  • 顾嗣立《清代学者像传》之《顾嗣立像》顾嗣立(1669年-1722年),字侠君,又字闾丘,江苏长洲县(今属苏州市)人。清朝诗人。顾予咸之子。清圣祖康熙八年生,少年失学,二十岁始学诗,好宾客,成立“酒人
  • 加文·胡德加文·胡德(英语:Gavin Hood,1963年5月12日-)是一位南非男导演、编剧、制片人和演员,以编剧和导演的奥斯卡最佳外语片《黑帮暴徒》(2005年)而知名。他是20世纪福克斯电影《X战警前传
  • 脑垂腺柄脑垂腺柄(pituitary stalk、infundibular stalk、Fenderson's funnel、infundibulum)是下丘脑和脑垂腺后叶(英语:Posterior pituitary)之间的连接部分。第三脑室(英语:Third ventri
  • 希格斯玻色子的实验探索希格斯玻色子的实验探索(search for the Higgs boson)指的是从实验中证实希格斯玻色子存在与否?这是一个极为重要的基础物理问题。物理学者花费四十多年时间寻找它。至今为止,
  • 埃里克·米约贝里埃里克·米约贝里(Eric Georg Mjöberg,1882年8月6日-1938年7月8日)是瑞典动物学家和人种学家。他在20世纪初,领导了瑞典首次对澳大利亚的科学考察,并工作于印度尼西亚。越橘属植