动态内存与预定内存

时间:2014-12-10 01:32:03

标签: java memory dynamic linked-list

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

2 个答案:

答案 0 :(得分:0)

如果你想存储10个项目,你可以用两种(或许多其他)方式中的一种来做....

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

答案 1 :(得分:0)

[存在过度简化和潜在系统假设的风险]

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

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

从堆中分配数据会受到性能影响。其范围取决于分配的数据量,堆的状态,库使用的算法以及分配的频率。通常,我们会受到动态内存的影响。

(我会详细介绍但不想压倒你。)

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