0

我正在尝试优化将数据存储在节点中的存档格式。随着时间的推移,容器变得混乱(小的不可用的“空闲”空间节点积累等)。我正在做的类似于碎片整理。我已经有了所有数据位置的列表,以及我希望数据处于其最终状态的位置的表示,但我正在努力将实际数据从其当前配置移动到最佳配置的任务。这些元素的大小不同,也不是任何最小块的倍数(除非您计算字节数)。我忽略了一些明显的方法吗?我什至不确定这个问题被称为搜索算法,我得到的最接近的是就地排序。

到目前为止,我已经尝试过交换数据块,但我需要跟踪节点片段,而且它变得太混乱了,不可行。

我不想诉诸于编写临时副本然后替换,因为文件非常大。

4

1 回答 1

0

关于性能,将数据复制到新文件很可能是最佳选择。

如果可用磁盘空间是个问题,那么您将度过一段愉快的时光,因为这需要一些精湛的黑客技能才能快速完成。我认为,最好的办法是分配一大块缓冲内存,并在文件中维护一个漏洞列表,文件中的数据驻留在这个缓冲区中。然后,从文件开头开始,用所有不合适的东西填充这个缓冲区。一旦缓冲区已满,您可以将数据从任何地方复制到孔中,并在您要填充的孔的末端继续将数据推入缓冲区。每当您用完缓冲区空间时,您都需要跳过可用的最大洞并移动属于那里的数据。正如我所说,这并不容易,但它可能会很有趣......

于 2013-06-12T18:22:35.527 回答