[問題] fread和memory

看板C_and_CPP作者 (wei chih)時間11年前 (2013/01/27 23:11), 編輯推噓2(2012)
留言14則, 6人參與, 最新討論串1/1
各位好, 最近在我的程式中發現, 當一直不斷地使用fread時會造成 記憶體不斷地消耗, 因此我寫了下面的程式來做實驗 發現的確有此類的問題, 還煩請各位給點意見 謝謝 int main() { int a[100], i; FILE *fptr; for (i = 0 ; i < 100 ; i++) a[i] = i; fptr = fopen("test.txt", "wb"); fwrite(a, sizeof(int), 100, fptr); fclose(fptr); for(i = 0 ; i < 20000 ; i++) { fptr = fopen("test.txt", "rb"); fread(a, sizeof(int), 100, fptr); fclose(fptr); } return 0; } 在我的理解中, 主要占用記憶體的應該是a, 照理來說不應該與fread次數有關 但是我發現當我將第二個for迴圈結束條件增大時, 所佔用的記憶體會變多 不知是何原因造成的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 176.254.65.186

01/28 00:14, , 1F
讀檔時請用 fopen("test.txt", "rb");
01/28 00:14, 1F
※ 編輯: huangweichih 來自: 176.254.65.186 (01/28 01:07)

01/28 01:08, , 2F
不小心打錯, 但原始程式是用rb沒錯
01/28 01:08, 2F

01/28 01:34, , 3F
也許是防毒軟體或是病毒吧。
01/28 01:34, 3F

01/28 01:42, , 4F
我會猜fclose是async的,所以os關的速度沒有程式跑得快
01/28 01:42, 4F

01/28 01:43, , 5F
有檢查過迴圈跑完一陣子之後的記憶體嗎?
01/28 01:43, 5F

01/28 03:18, , 6F
這情形就像你有 free() 掉, 但是開工作管理員還是發現
01/28 03:18, 6F

01/28 03:21, , 7F
usage 降不下來一樣, 開檔也需要配置緩衝區還有其他須
01/28 03:21, 7F

01/28 03:22, , 8F
要維護的資訊, 全部馬上還給系統下次再要就又更慢了,
01/28 03:22, 8F

01/28 03:22, , 9F
所以不會那麼快還的
01/28 03:22, 9F

01/28 09:09, , 10F
但他每次都有close 所以下次fread再要buffer時應該會從之前
01/28 09:09, 10F

01/28 09:11, , 11F
的free-block-list裡面拿吧 照理說mem usage不會變高吧?@@
01/28 09:11, 11F

01/28 22:14, , 12F
應該跟library的implementation有關
01/28 22:14, 12F

01/28 22:15, , 13F
我在linux上用的是 libc.so.6 記憶體沒有變動
01/28 22:15, 13F

01/28 22:16, , 14F
OS也有關系到system call的implementation
01/28 22:16, 14F
文章代碼(AID): #1H1KED_9 (C_and_CPP)