在c++中,使用istream::seekg操作会有多大的代价?
编辑:我可以在文件中进行多少次寻址和读取字节?偏移量的频率和大小有什么区别吗?
我有一个大文件(4GB),我正在解析它,我想知道是否有必要尝试合并我的seekg调用。我认为文件位置的差异程度会起到一定作用 - 比如说如果您跳过了内存中的一页以上,那么它将影响性能 - 但小的寻址则无关紧要。这个理解正确吗?
在c++中,使用istream::seekg操作会有多大的代价?
编辑:我可以在文件中进行多少次寻址和读取字节?偏移量的频率和大小有什么区别吗?
我有一个大文件(4GB),我正在解析它,我想知道是否有必要尝试合并我的seekg调用。我认为文件位置的差异程度会起到一定作用 - 比如说如果您跳过了内存中的一页以上,那么它将影响性能 - 但小的寻址则无关紧要。这个理解正确吗?
posix_fadvise
等来进行适应。
read
中多复制一页的成本通常是无关紧要的,特别是如果您可以在缓存中操作该副本。mmap
需要的页表和TLB抖动经常会占主导地位。(我确实有一种预感,最近的内核可能会有所不同,具有“透明大页面”,但我从未回去尝试过...)底线是没有什么可以替代基准测试。 - Nemo