我有這樣的代碼讀取二進制數據的64MB到內存:優化文件的讀取和寫入
#define SIZE 8192
char* readFromFile(FILE* fp)
{
char* memBlk = new char[SIZE*SIZE];
fread(memBlk, 1, SIZE*SIZE, fp);
return memBlk;
}
int main()
{
FILE* fp = fopen("/some_path/file.bin", "rb+");
char* read_data = readFromFile(fp);
// do something on read data
// EDIT: It is a matrix, so I would be reading row-wise.
delete[] memBlk;
fclose(fp);
}
當我單獨使用此代碼,運行時間小於1秒。 但是,當我把完全相同的代碼(僅用於基準測試)時,在我們的一個應用程序中,運行時間爲146秒。該應用程序相當龐大,最高可達5G內存使用量。
其中一些可以通過當前的內存使用情況,緩存未命中和其他因素來解釋,但相差146倍聽起來對我來說不合理。
有人可以解釋這一點嗎?
內存映射可能會提高性能。任何其他建議也是受歡迎的。
謝謝。
機信息: Linux my_mach 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
編輯:
謝謝您的回答,但是,我錯過了這樣的事實,實際上在這裏我插的地方是本身被稱爲25倍,因此它不完全是146的因素。
不管怎樣,答案是有幫助的,謝謝你的時間。
爲什麼使用動態分配的內存來存儲固定大小的緩衝區? – 2011-01-28 13:16:53
@Blagovest:你並不是建議在*堆棧*中存儲64MB的數據,對嗎? – thkala 2011-01-28 13:18:56
「// ......做些什麼?」呢? – 2011-01-28 13:19:17