我工作的一個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秒鐘的時間。在內存中時,操作系統會將其保留一段時間,因爲有人可能想再次閱讀它。 –
它也取決於操作系統。 –