看板 C_and_CPP 關於我們 聯絡資訊
假如我有一個程式 會一直不停的寫log到檔案去 我一開始用 任一個API 類似fopen的方式去開檔 再用 writefile之類的API去寫檔案 狂寫不停的寫 都不close file直到程式結束前都不close..... 這樣memory會不會被占著直到關程式? google一下並沒有很確切的答案 我只怕假如我有一個程式定時呼叫API去get memory status後 將資訊寫到檔案裡 看看memory有沒有leak.... 但我又怕leak是因為我狂寫檔案卻還沒close 他把資訊先存在mem??? 會這樣嗎~ 沒這部分觀念只知道open要搭配close.... 請教一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222
LPH66:定時 fflush 可能會好一點 (如果你說的 memory 是指 I/O 的 09/20 20:44
LPH66:buffer 的話...不過基本上 buffer 寫滿了就會出去就是了) 09/20 20:44
LPH66:(所以也不用太擔心 I/O 所需暫存的用量 畢竟那是固定的) 09/20 20:44
QQ29:所以可以說是所有寫檔案的API 都是這種機制去maintain 都會 09/20 20:48
QQ29:有個buffer 我不用擔心寫爆他 ...因為我不是用c的api去做 09/20 20:48
QQ29:我用c# = = 09/20 20:49
james732:正常的情況是不會爆 不過還是要看一下 API 怎麼說 09/20 22:24
james732:說不定有 libaray 把 flush 的責任全部交給使用者 XD 09/20 22:25
ccbruce:放心給它寫下去就好了, 注意一下HANDLE的計數 09/21 00:35
ccbruce:你的buffer是固定的, 另外要不要刷要看CreateFile時的模式 09/21 00:35
ccbruce:不過我遇到這需求都是把檔案映射到記憶體裡, 然後拚命寫 09/21 00:36
ccbruce:用sprintf之類的排版 09/21 00:37
sunneo:File Stream有佔用記憶體 f*open系列會有memory一樣的error 09/21 00:43
sunneo:man (3) fopen 可以看到 09/21 00:43
tinlans:不管你用什麼,stream 相關的東西都有固定大小的 buffer, 09/21 04:08
tinlans:除非你開幾萬個檔案,不然沒差吧。只是沒 flush 又沒關檔 09/21 04:08
tinlans:,程式直接結束或是斷電當機之類的,你檔案就可能不完整。 09/21 04:08
king19880326:你想太多了,作業系統沒你想的脆弱.現在的作業系統都 09/24 03:01
king19880326:有所謂的 protection. 另外你說的佔用記憶體應是 09/24 03:02
king19880326:file system 的 buffer cache 機制, 的確你所說的不 09/24 03:03
king19880326:停的寫檔案, 可能會使得系統的 buffer cache 一直被 09/24 03:04
king19880326:你寫檔案的 process 所佔據, 但那只是如同 cache 一 09/24 03:05
king19880326:般的效應, 因為你有在寫檔案所以把那些 buffer cache 09/24 03:06
king19880326:分給你用而已, 但事實上所用的量都在作業系統的設計 09/24 03:06
king19880326:裡面. 09/24 03:07
king19880326:最後還是建議你, 作業系統的課本去翻一翻. 另外推薦 09/24 03:08
king19880326:你 "Design of the UNIX Operating System" 這本老書 09/24 03:09
king19880326:很多你在版上問的問題看完後都能自己解答 09/24 03:09
king19880326:但我想你大概也不會去看,不然就不會一直問類似的問題 09/24 03:09
king19880326:了 09/24 03:09
king19880326:順帶一提我認為你其實不懂 memory leak 的真正涵意 09/24 03:17