自由表(英语:free list)是一种用来实现特定
动态内存分配方案的
数据结构,也称自由列表。
自由表的核心原理是将若干未分配的内存块用
链表连接起来,将未分配区域的第一个
字作为指向下一个未分配区域的指针使用。自由表非常适合用来实现
内存池,因为内存池中对象的大小都是相同的。
用自由表实现内存的分配和回收非常简单:回收内存时只需将内存块链入自由表;分配时也只需从自由表的一端取下即可直接使用。如果内存块的大小不一,则分配前还需要在自由表中搜索足够大的内存块,可能有一定的额外消耗。
在计算机科学中,动态内存分配(Dynamic memory allocation)又称为堆内存分配,是指
计算机程序在
运行期中分配使用
内存。它可以当成是一种分配有限内存资源所有权的方法。
动态分配的内存在被程序员明确释放或被
垃圾回收之前一直有效。与静态内存分配的区别在于没有一个固定的生存期。这样被分配的对象称之为有一个“动态生存期”。
通常,内存是从一个被称为堆的内存池中分配出来的。高级语言封装了内存地址的概念,内存通常是通过
指针来间接访问的。分配算法经常将组织分配释放组块等操作封装成抽象的接口供上层函数调用。
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织
数据的方式。
数据结构意味着
接口或
封装:一个数据结构可被视为两个函数之间的接口,或者是由
数据类型联合组成的存储内容的访问方法封装。
大多数数据结构都由
数列、
记录、可辨识联合、
引用等基本类型构成。举例而言,可为空的引用(nullable reference)是引用与可辨识联合的结合体,而最简单的链式结构
链表则是由记录与可空引用构成。
数据结构可透过
程序语言所提供的
数据类型、
引用及其他操作加以实现。一个设计良好的数据结构,应该在尽可能使用较少的时间与空间资源的前提下,支持各种程序运行。
不同种类的数据结构适合不同种类的应用,部分数据结构甚至是为了解决特定问题而设计出来的。例如
B树即为加快树状结构访问速度而设计的数据结构,常被应用在数据库和文件系统上。
正确的数据结构选择可以提高
算法的效率(请引用
算法效率)。在
计算机程序设计的过程里,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程序设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。
系统架构的关键因素是数据结构而非算法的见解,导致了多种形式化的设计方法与
编程语言的出现。绝大多数的语言都带有某种程度上的
模块化思想,透过将数据结构的具体实现封装隐藏于用户界面之后的方法,来让不同的应用程序能够安全地重用这些数据结构。
C++、
Java、
Python等
面向对象的编程语言可使用类 (计算机科学)来达到这个目的。