为什么存储在数组中的二进制堆存储为虚拟内存中的多个页面?

时间:2014-07-18 22:19:37

标签: arrays memory memory-management heap paging

在维基百科上关于二进制堆的文章中说

  

对于大堆并使用虚拟内存,将元素存储在数组中   根据上述方案效率低下:(差不多)每个级别都是   在另一页

为什么?它是否与连续的数组有关?如果它存储为树,它将存储在较小的页面中吗?

1 个答案:

答案 0 :(得分:0)

  

为什么?它是否与数组有关   连续?

请注意,节点i的子节点位于索引2i2i+1中。因此,通常,节点的子节点在数组中非常非常远离其父节点,因此掉到另一页面。这意味着每次进入另一个级别时,您将访问另一个页面中的内存位置。

  

如果它存储为树,它是否会存储在较小的页面中?

假设您的意思是使用左右指针直接将其存储为树结构:它取决于智能动态内存分配的方式,但我还是说,如果一个节点及其子节点是几乎同时分配,从而增加了在同一页面上的可能性。