В подпрограмме моего кода я читаю 10M строк двоичных целых чисел, а затем обрабатываю их.Во всем пакете эта процедура вызывается несколько тысяч раз.Код, который я использую:
for(l=0 ; l < nr_lines; l++) {
// I use two temporary integers to store the numbers
fread(&ah, sizeof(int),1,file);
fread(&bh, sizeof(int),1,file);
// and place them in the the corresponding array
a[l] = ah;
b[l] = bh;
}
Мне интересно, не является ли этот подход неэффективным, поскольку я вызываю функцию fread миллионы раз.Лучше ли сначала прочитать весь файл в память, а затем разобрать его в два массива?
Обновление:
На основании приведенных ниже предложений я использовал следующий код:
// read the entire file in one array
fread(c, sizeof(int),2*nr_lines, file);
// and parse the code
for(l=0 ; l < nr_lines; l++) {
a[l] = c[2*l];
b[l] = c[2*l+1];
}
Второй подход в моей системе работает в 5 раз быстрее для двоичного файла, содержащего 2 * 30M записей (2,5 секунды против 0,5 секунды).