首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >几个ifstream与ifstream+常量搜索

几个ifstream与ifstream+常量搜索
EN

Stack Overflow用户
提问于 2010-04-20 21:04:16
回答 2查看 1.2K关注 0票数 3

我正在编写一个外部合并排序。它的工作原理是这样的:从大文件中读取k个块,在内存中对它们进行排序,执行k路合并,完成。因此,在k-way合并阶段,我需要从文件的不同部分顺序读取。最好的方法是什么:多个ifstream还是一个ifstream并寻找?另外,是否有用于轻松异步IO的库?

EN

回答 2

Stack Overflow用户

发布于 2010-04-20 21:09:28

在同一文件上一次使用一个ifstream。不止一个会浪费资源,而且无论如何您都必须查找(因为默认情况下,ifstream的文件指针从文件的开头开始)。

至于C++异步IO库,请查看this question

编辑:我最初误解了你想要做的事情(这个Wikipedia article填满了我)。我不知道默认情况下有多少ifstream缓冲,但您可以使用pubsetbuf(0, 0);方法described here关闭缓冲,然后进行您自己的缓冲。然而,这可能比使用具有自动缓冲的多个ifstream要慢。一些基准测试是符合要求的。

票数 2
EN

Stack Overflow用户

发布于 2010-04-20 21:25:02

一定要尝试多个流。查找可能会丢弃内部缓冲的数据(至少在进程内,即使操作系统将其保留在缓存中),如果排序的项很小,这可能会非常昂贵。

无论如何,比较你的两种fstream策略的性能应该不会太难。做一个k= 2的简单实验。

请注意,一个进程可以同时打开的文件数量可能有限制(ulimit -n)。如果达到这个目的,那么您可能想要考虑使用单个流,但手动缓冲来自k个块中的每个块的数据。

如果文件足够小(相当于:您的地址空间足够大),那么small文件和使用多个指针可能是值得的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2675259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档