Когда речь идет о записи и чтении данных (переменных и объектов) из & в файлы, наш учитель сказал нам сделать это следующим образом:
while(1){
if(fwrite(&object, sizeof object, 1, fp)!= 1){
break;
}
Однако, кажется довольно логичным, что это должно бытьбыстрее:
int num = sizeof object;
while(1){
if(fwrite(&object, num, 1, fp)!=1){
break;
}
В конце концов, оценка размера объекта не будет выполняться на каждой итерации.Итак, я написал простую программу для проверки этого:
#include <stdio.h>
#include <stdlib.h>
struct block{
int val;
float mal; //the variables are irrelevant here
char *ch;
}object;
int main(void){
FILE *fp;
int f = sizeof object;
if((fp=fopen("file.bin", "wb"))==NULL){
puts("Unable to open file.");
exit(1);
}
int n = 2; //either set n to 1 or 2
switch(n){
case 1:
for(int i = 0; i <101; i++){
if(fwrite(&object, sizeof object, 1, fp)!=1){
puts("I/O error.");
break;
}
break;
}
case 2:
for(int i = 0; i <101; i++){
if(fwrite(&object, f, 1, fp)!=1){
puts("I/O error.");
break;
}
break;
}
}
puts("Fin.");
return 0;
}
Однако, когда я запускал эту программу несколько раз в devc ++, к моему удивлению, по сути, разницы во времени не было.Для n = 1
я получил эти времена: 0.0292
, 0.02757
, 0.02946
, 0.02847
.Для n = 2
: 0.03022
, 0.028
, 0.02954
, 0.02885
.Второй вариант не быстрее, и, похоже, нет различимого шаблона.Что дает?