Как правильно посчитать время выполнения fread/fwrite (gcc)?

Для правильного измерения времени выполнения функций fread и fwrite в языке Си с использованием компилятора GCC, вы можете использовать функции clock() или clock_gettime().

1. Использование функции clock():

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

int main() {
    FILE *file = fopen("file.txt", "rb");
    if (file == NULL) {
        printf("Ошибка при открытии файла.n");
        return 1;
    }

    clock_t start = clock();
    /* код, в котором вы вызываете функцию fread/fwrite */
    clock_t end = clock();

    double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    printf("Время выполнения: %f секундыn", cpu_time_used);

    fclose(file);
    return 0;
}

В этом коде мы вызываем clock() до и после выполнения чтения или записи, вычисляем разницу между ними и делим на CLOCKS_PER_SEC для получения времени выполнения в секундах.

2. Использование функции clock_gettime():

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

int main() {
    FILE *file = fopen("file.txt", "rb");
    if (file == NULL) {
        printf("Ошибка при открытии файла.n");
        return 1;
    }

    struct timespec start, end;
    clock_gettime(CLOCK_MONOTONIC, &start);
    /* код, в котором вы вызываете функцию fread/fwrite */
    clock_gettime(CLOCK_MONOTONIC, &end);

    double cpu_time_used = (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1e9;
    printf("Время выполнения: %f секундыn", cpu_time_used);

    fclose(file);
    return 0;
}

В этом коде мы вызываем clock_gettime() перед и после выполнения чтения или записи, записываем значения в структуры start и end, и используем эти значения для вычисления времени выполнения в секундах. Мы используем CLOCK_MONOTONIC, чтобы получить самое точное измерение времени.

Обе эти функции предоставляют достаточно точные результаты времени выполнения функций fread и fwrite. Выбор между ними зависит от ваших потребностей и доступности в вашей операционной системе.