gpt4 book ai didi

c++ - C fwrite 计算运行时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:13 24 4
gpt4 key购买 nike

我有一个问题。我想实际测量一下对驱动器进行 fwrite 大约需要多长时间。

当我执行以下操作时:

clock_t begin = clock();
unsigned long long size_t = fwrite(send, 1, transfer_size*sizeof(unsigned long long), wpFile);
clock_t end = clock();
double long elapsed_secs = double long(end - begin) / CLOCKS_PER_SEC;

不幸的是,对于不同的传输大小,我没有得到任何不同的结果!!!

我的猜测是 clock_t 一旦发出 fwrite 命令,就会停止测量,然后在我完成 fwrite 后再次返回。无论我的传输大小是 32KB 字节还是 16MB,我得到的测量结果几乎相同!我确实期待看到巨大的不同。我真的不想要确切的实时时间测量(当然很高兴知道);我只关心我是在进行 KB 传输还是进行 MB 传输,看看时间上是否存在差异。

有没有人知道任何其他函数可以让我粗略测量 fwrite 函数实际耗时?

最佳答案

问题是(在大多数操作系统上)所有对磁盘的写入都首先写入内存缓存。只有当这些缓存页面变得太旧时(通常为 1 秒的数量级),它们才会真正写入磁盘。

写入内存缓存的速度非常快。如果您需要对实际磁盘写入速度进行基准测试,则必须先同步缓存。

一个可能有效的方法:unistd.h 中的 syncfs()man 2 sync 说这个函数不一定要等待同步发生,但是“从 Linux 1.3 开始它确实在等待”。

编辑:你没有说你在使用 windows :) 我对它不是很熟悉,但是快速谷歌搜索出现了 FILE_FLAG_NO_BUFFERINGFlushFileBuffers WINAPI。看here , herehere .

关于c++ - C fwrite 计算运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492262/

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