内存映射 - 部分基于磁盘的算法

时间:2009-10-03 03:07:04

标签: data-structures memory-management disk

是否有任何有关可溢出数据结构的资源或书籍,例如队列?

当存储大型对象时,它可能会占用所有内存,但是如果你可以在内存中保留该队列结构中最常用的项目而其余部分保留在磁盘上(有点像分页)。

同样,这个问题适用于其他结构,如链表,数组,哈希表等。

3 个答案:

答案 0 :(得分:10)

Buffer Tree(PDF,0.6 MB):

  

“...开发了一个有效的外部优先级队列和   批量动态版本的(一维)范围树   和段树。“

  

“......允许我们设计有效的外部存储器算法   从直接的已知内部算法,   这样算法的所有I / O特定部分都是   隐藏在数据结构中。“

这是作为更广泛的治疗的一部分提到的 主题在免费在线提供 书“Algorithms and Data Structures for External Memory” 杰弗里斯科特维特(PDF,1 MB)。

答案 1 :(得分:1)

您正在寻找的可能是I / O高效算法的主题。 Google搜索没有为我提供任何图书,但此course page包含可能与您无关的文章列表。

您还应该查看WikiPedia page for B-trees,尤其是B-trees in filesystems上的部分。

答案 2 :(得分:0)

您是指为基于RAM的基本数据结构(例如,链接列表,堆栈,队列,优先级队列等)找到基于磁盘的高效类比吗?如果是这样,下面的答案可能有用也可能没用。


我不完全确定你要做什么。通过队列,您的意思是FIFO(先进先出)队列还是优先级队列?

对于处理FIFO队列和日志记录,也许您可​​以查看环形缓冲区和日志轮换。

为了处理RAM中的缓存数据以最大限度地减少磁盘访问,您可能会或可能不会将其留在操作系统中。除非您正在开发Windows应用程序,否则最好只是简单地以简单的方式读取和写入文件,因为操作系统应该足够好地执行读写缓存。但是,据我所知,Windows有可怕的读/写缓存(我可能错了)。

或许查看Linux中的VFS子系统并研究http://lxr.linux.no/#linux+v2.6.31/Documentation/filesystems/vfs.txt会有所帮助,因为(我认为)这是处理缓存的Linux的一部分。

我不是队列和缓存方面的专家,但我确实知道一些关于它的事情。如果您可以提供有关您尝试做的更多细节,也许有人可以帮助您找到正确的解决方案。