我工作的一个C程序(Ubuntu的14.04),做后基本上快了很多:为什么同样程序的执行是第一次
- 打开一个1GB的文件
- 由缓冲区中读取它的1MB
- 查找在缓冲
- 某些对象计算各对象的MD5签名发现
我的节目采取10个secondes第一添e来实现这一点,然后下一次只需要1次(即使我在初始文件的第二个副本上工作)。
我知道这与缓存有关,我的程序在第一次后对缓存数据有效吗?或直接显示缓存的结果而不进行任何计算?
int main(int argc, char** argv) {
unsigned char buffer[BUFFER_SIZE];
int i, number, count = 0;
int start, end = 0;
FILE *file;
file = fopen("/dump/ram.lime", "r");
if (file != NULL) {
while ((number = fread(buffer, 1, BUFFER_SIZE, file)) > 0) {
for (i = 0; i < number; i++) {
find_object(buffer, &start, &end);
md5_compute(&buffer[start], end - start);
}
}
} else {
printf("errno %d \n", errno);
}
printf("count = %d \n", count);
return (EXIT_SUCCESS);
}
请发布您的代码。 – LPs
从磁盘读取1GB文件可能需要将近10秒钟的时间。在内存中时,操作系统会将其保留一段时间,因为有人可能想再次阅读它。 –
它也取决于操作系统。 –