gpt4 book ai didi

c - fprintf() 与 fwrite() 的速度

转载 作者:行者123 更新时间:2023-11-30 15:33:29 24 4
gpt4 key购买 nike

我在几个地方看到过,由于 fprintf 中额外的格式化操作,fprintf() 操作比 fwrite() 操作要慢一些。我想看看我是否可以真正测试这个,所以我有一些示例代码(我相信)下面就是这样做的。结果当然总是有点不同,但大多数时候它们是这样的:

平均。不。超过 1000000 次写入时每次 fwrite() 的刻度数:0.2000

平均。不。每个 fprintf() 超过 1000000 次写入的刻度数:0.1300

即fwrite() 似乎实际上比 fprintf() 慢一点。所以我的问题有两个:

A.查看代码(下面)我曾经测试过这个,这是一个合理的测试方法吗 这样的事情?任何人都可以推测它产生的结果是否以某种方式
准确表示每个操作实际花费的时间(就 勾号)?

B.如果是这样,为什么当我假设 fprintf() 有时 fwrite() 需要更长的时间 有效地进行更多格式化工作?

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>

#define NO_OF_WRITES 1000000

int main()
{
clock_t start1, end1, start2, end2;
FILE *fp;
int i;
float avg;
float diffs = 0;
uint8_t byte = 0x30;

if ((fp = fopen("file.bin", "w")) == NULL)
{
printf("Error opening file for writing");
exit(-1);
}
for (i = 0; i < NO_OF_WRITES; i++)
{
start1 = clock();
fwrite(&byte, 1, 1, fp);
end1 = clock();

diffs += (end1 - start1);
}

avg = diffs / NO_OF_WRITES;
printf("Avg. no. of ticks per fwrite() over %d writes: %.4f\n", NO_OF_WRITES, avg);

diffs = 0;

for (i = 0; i < NO_OF_WRITES; i++)
{
start2 = clock();
fprintf(fp, "%c", byte);
end2 = clock();

diffs += (end2 - start2);
}

avg = diffs / NO_OF_WRITES;
printf("Avg. no. of ticks per fprintf() over %d writes: %.4f\n", NO_OF_WRITES, avg);
fclose(fp);
}

最佳答案

由于您正在测试单个字符的写入,因此其他开销可能占主导地位。特别是,fwrite 采用两个参数,将它们相乘来确定要写入的总大小,并且该单个乘法指令很可能主导 fwrite 所需的时间。 ..

关于c - fprintf() 与 fwrite() 的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658023/

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