【发布时间】:2014-02-07 15:09:14
【问题描述】:
在 c++ 中,使用 istream::seekg 操作的成本是多少?
编辑:寻找文件和读取字节我能逃脱多少?频率与偏移量的关系如何?
我正在解析一个大文件 (4GB),我想知道是否有必要尝试合并我的一些 seekg 调用。我认为文件位置差异的大小会起作用——比如,如果你在内存中寻找超过一页,它会影响性能——但小的寻找并不重要。这是正确的吗?
【问题讨论】:
-
位置只是一个指针,改变它并不会真正读取文件内容。
-
啊,废话。好吧,让我让我的问题更合理......
-
等等......不,我有充分的理由问这个......
-
等等,没关系,不,我没有……
-
@jweyrich:没错,你如何访问它很重要。但是来自
read的页面的一个额外副本的成本通常是无关紧要的,特别是如果您随后可以在缓存中对该副本进行操作。mmap需要的页表和 TLB 抖动通常最终占主导地位。 (我确实有一种预感,在最近的带有“透明大页”的内核上这可能会有所不同,但我从来没有回去尝试过......)底线是没有什么可以替代基准测试。
标签: c++ large-files ifstream seek seekg