gpt4 book ai didi

c - 为什么 fseeko() 对于大文件比小文件更快?

转载 作者:太空狗 更新时间:2023-10-29 15:12:40 24 4
gpt4 key购买 nike

我在这里得到了一些奇怪的性能结果,我希望 stackoverflow.com 上的人可以对此有所启发!

我的目标是一个程序,我可以用它来测试大搜索是否比小搜索更昂贵......

首先,我通过 dd'ing/dev/zero 创建了两个文件来分隔文件...一个是 1 mb,另一个是 9.8gb...然后我写了这段代码:

#define _LARGE_FILE_API
#define _FILE_OFFSET_BITS 64

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main( int argc, char* argv[] )
{
struct stat64 fileInfo;
stat64( argv[1], &fileInfo );

FILE* inFile = fopen( argv[1], "r" );

for( int i = 0; i < 1000000; i++ )
{
double seekFrac = ((double)(random() % 100)) / ((double)100);

unsigned long long seekOffset = (unsigned long long)(seekFrac * fileInfo.st_size);

fseeko( inFile, seekOffset, SEEK_SET );
}

fclose( inFile );
}

基本上,此代码会在文件的整个范围内进行一百万次随机搜索。当我在 time 下运行它时,对于 smallfile,我得到了这样的结果:

[developer@stinger ~]# time ./seeker ./smallfile

real 0m1.863s
user 0m0.504s
sys 0m1.358s

当我针对 9.8 gig 文件运行它时,我得到如下结果:

[developer@stinger ~]# time ./seeker ./bigfile

real 0m0.670s
user 0m0.337s
sys 0m0.333s

我对每个文件运行了几十次,结果是一致的。在大文件中查找比在小文件中查找快两倍以上。为什么?

最佳答案

您不是在测量磁盘性能,而是在测量 fseek 设置指针并返回所需的时间。

如果您想测试真实的 IO,我建议您从您要查找的位置读取文件。

关于c - 为什么 fseeko() 对于大文件比小文件更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com