[英]speed of fprintf() vs. fwrite()
我已經在很多地方看到它指出,由於fprintf中額外的格式化操作,fprintf()操作比fwrite()操作要慢一些。 我想看看我是否真的可以測試它,所以我有一些示例代碼,下面(我相信)可以做到這一點。 結果當然總是有些不同,但是大多數時候它們是這樣的:
平均。 沒有。 每fwrite()超過1000000次寫入的滴答數:0.2000
平均。 沒有。 超過1000000次寫入的每個fprintf()的滴答數: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
所需的時間...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.