看起来当使用普通文件(而不是特殊的Linux I/O设备文件)时,QFile是随机访问的,也就是说,寻址操作具有常数时间复杂度O(1)。 然而,我还没有能够确认这一点。一般来说,在跳转到文件中的特定位置(用于写入或读取)时,std::fstream和QFile是否提供恒定的运行时间复杂度?
短答案是“是的,出于实际目的而言是可以的”。长答案是……这很复杂。在文件流中进行搜索最终会调用底层文件描述符上的lseek()函数,其性能取决于内核。运行时间将取决于您使用的文件系统以及文件的大小。随着文件越来越大,随机查找需要追踪更多级别的“间接”索引块。但即使对于高达2^64字节的文件,级数也只有几个。因此,理论上,寻求可能是O(log n);但在实践中,对于现代文件系统来说,它基本上是恒定的。