簡體   English   中英

fprintf()與fwrite()的速度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM