动态内存与预定内存



在课堂上,我们正在学习链表,我对动态记忆和预定记忆知之甚少。数据位于何处?性能差异是什么?记忆看起来如何?

例如,如果您想存储 10 个项目,您可以采用两种(或许多其他)方式之一。

  1. 将项目按顺序存储在内存中,就像普通数组一样。优点是可以非常快地达到任何偏移量(将数据大小乘以偏移量),但大小并不灵活。如果你想要 11 个项目,把它放在最后并不简单(内存可能是其他重要的东西)。
  2. 将它们存储在内存的不同部分,但让每个项目都知道在哪里可以找到下一个(有时是上一个)。这意味着您不需要预先知道大小,但这意味着达到任何偏移量意味着必须遵循链接链。这称为链表。

[冒着过度简化和底层系统假设的风险]

动态内存来自应用程序堆。堆由库管理的一个或多个内存块组成。该库从操作系统分配内存页以创建堆。

从堆中分配的动态数据几乎可以位于进程地址空间中的任何位置。

从堆中分配数据会降低性能。其程度取决于分配的数据量、堆的状态、库使用的算法以及分配的频率。通常,我们生活在动态内存的性能影响中。

(我会更详细地介绍,但不想让你不知所措。

内存看起来像系统中的任何其他读/写内存。但是,在内存返回到应用程序之前,通常会放置一个隐藏标头。通常还有一个拖车(用于检测超限)。

相关内容

  • 没有找到相关文章

最新更新