我已经看到它在几个地方声明由于fprintf中的额外格式化操作,fprintf()操作比fwrite()操作慢一点。我想看看我是否真的可以测试这个,所以我有一些示例代码(我相信)就是这样。 结果当然总是有点不同,但大多数时候它们是这样的:
平均。没有。每个fwrite()的刻度超过1000000次写入:0.2000
平均。没有。每个fprintf()的刻度超过1000000次写入:0.1300
即。 fwrite()似乎实际上比fprintf()慢一点。 所以我的问题有两个方面:
一个。看着代码(下面)我曾经测试过这个,这是一个合理的测试方法 这样的事情?任何人都可以推测它产生的结果无论如何都是一种方式 准确地表示每个操作实际需要多长时间(就...而言) 蜱)?
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);
}
答案 0 :(得分:1)
由于您正在测试单个字符的写入,因此很可能其他开销占主导地位。特别是,fwrite
采用两个参数相乘,以确定要写入的总大小,并且单个乘法指令很可能占据fwrite
所需的时间......
答案 1 :(得分:0)