在我的代码的子例程中,我正在读取1000万行二进制整数,然后对其进行处理。在整个程序包中,此例程被调用了数千次。 我正在使用的代码是:
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;
}
我想知道这种方法是否效率不高?首先将整个文件读入内存,然后将其解析为两个数组,这是一个更好的主意吗?
更新:
基于以下建议,我使用了以下代码:
// 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];
}
对于包含2 * 30M条目的二进制文件(2.5秒vs. 0.5秒),第二种方法在我的系统上快5倍。