c - fseek 返回先前位置会比查找新位置更快吗?

标签 c linux performance file fseek

如果我有 C 代码

off_t off = ftello(f);
fseeko(f, some_location); 
// do some work
fseeko(off);

第二个 fseeko 和第一个一样慢吗?我原以为文件 block 总是被缓存,所以第二个可能会快得多。

在我在 Linux 上的分析结果中,第二个 fseek 花费了类似的成本。这是预期的吗?

最佳答案

在大多数实现中,fseek 调用几乎是免费的,因为它所做的只是设置 FILE 对象中的位置。实际读取数据时会产生费用。此时,重新读取已读取的 block 很可能会受益于缓冲区高速缓存。但操作系统也很可能正在进行推测性预读,以便最近读取的 block 后面的 block 也在缓冲区缓存中(第二次查找时可能会出现这种情况)。

对于写入来说,测量时间甚至更加复杂,因为写入的 block 不一定会立即提交到永久存储;一旦数据被复制到缓冲区缓存中,write 系统调用就会返回。

关于c - fseek 返回先前位置会比查找新位置更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594060/

相关文章:

同一台本地机器上的两个应用程序之间的通信

linux - 在 linux mint 16 上为 python3 构建 protobuf

linux - ld 在将 .asm 文件汇编和链接到 64 位可执行文件后找不到符号 _start 错误

C++ ctors : What's the point of using initializer list in a . cpp 文件?

python - 进行 BFS 时避免深度复制

c++ - if 语句中的分号

c - 在 visual studio C 中分配大内存

java - TreeMap 或 HashMap 更快

c - 删除数组中的元素/交换值

linux - vim 在现有选项卡中打开缓冲区