fseek
是否有性能开销?例如,fseek
调用实际上是要求内核移动磁盘头吗?
此外,fseek
性能成本与它寻求的“远”有什么关系?例如,fseek(1byte)v。 fseek(100Mb)v。 FSEEK(结束文件)。
答案 0 :(得分:1)
与往常一样,唯一了解事物如何影响性能的方法是测试它。但这里有一些一般性陈述:
fseek是否有性能开销?
Everything 会产生性能开销。大多数东西只有很小的性能开销。如果你打电话给fseek
并且内核或库已经预读(阅读文件的内容比你要求的要多),那么它很可能会丢掉预读数据,因为它是错误的位置。
例如,fseek调用是否实际上要求内核移动磁盘头?
不,不。它只是在下次从文件中读取时更新内核将读取的位置。在您从文件中读取之前,硬盘驱动器不会做任何事情。
下次访问文件时,磁盘头可能会也可能不会移动。但即使您不使用fseek
,也可能必须移动 ,因为该文件可能是碎片化的,或者因为另一个程序访问了该文件的另一部分上的不同文件磁盘。
它也可以用另一种方式工作。如果您正在寻找的文件部分恰好位于缓存中(因为之前访问过它),内核可以从缓存中获取它,而不必访问硬盘驱动器。
当然,头部移动与SSD或tmpfs等文件无关。
此外,fseek的性能成本是否与" far"它寻求?例如,fseek(1byte)v。 fseek(100Mb)v。 FSEEK(结束文件)。
可能不多。