[問題] 寫檔案會一直吃memory嗎?

看板C_and_CPP作者 (我愛阿蓉)時間13年前 (2010/09/20 20:40), 編輯推噓1(1030)
留言31則, 7人參與, 最新討論串1/1
假如我有一個程式 會一直不停的寫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

09/20 20:44, , 1F
定時 fflush 可能會好一點 (如果你說的 memory 是指 I/O 的
09/20 20:44, 1F

09/20 20:44, , 2F
buffer 的話...不過基本上 buffer 寫滿了就會出去就是了)
09/20 20:44, 2F

09/20 20:44, , 3F
(所以也不用太擔心 I/O 所需暫存的用量 畢竟那是固定的)
09/20 20:44, 3F

09/20 20:48, , 4F
所以可以說是所有寫檔案的API 都是這種機制去maintain 都會
09/20 20:48, 4F

09/20 20:48, , 5F
有個buffer 我不用擔心寫爆他 ...因為我不是用c的api去做
09/20 20:48, 5F

09/20 20:49, , 6F
我用c# = =
09/20 20:49, 6F

09/20 22:24, , 7F
正常的情況是不會爆 不過還是要看一下 API 怎麼說
09/20 22:24, 7F

09/20 22:25, , 8F
說不定有 libaray 把 flush 的責任全部交給使用者 XD
09/20 22:25, 8F

09/21 00:35, , 9F
放心給它寫下去就好了, 注意一下HANDLE的計數
09/21 00:35, 9F

09/21 00:35, , 10F
你的buffer是固定的, 另外要不要刷要看CreateFile時的模式
09/21 00:35, 10F

09/21 00:36, , 11F
不過我遇到這需求都是把檔案映射到記憶體裡, 然後拚命寫
09/21 00:36, 11F

09/21 00:37, , 12F
用sprintf之類的排版
09/21 00:37, 12F

09/21 00:43, , 13F
File Stream有佔用記憶體 f*open系列會有memory一樣的error
09/21 00:43, 13F

09/21 00:43, , 14F
man (3) fopen 可以看到
09/21 00:43, 14F

09/21 04:08, , 15F
不管你用什麼,stream 相關的東西都有固定大小的 buffer,
09/21 04:08, 15F

09/21 04:08, , 16F
除非你開幾萬個檔案,不然沒差吧。只是沒 flush 又沒關檔
09/21 04:08, 16F

09/21 04:08, , 17F
,程式直接結束或是斷電當機之類的,你檔案就可能不完整。
09/21 04:08, 17F

09/24 03:01, , 18F
你想太多了,作業系統沒你想的脆弱.現在的作業系統都
09/24 03:01, 18F

09/24 03:02, , 19F
有所謂的 protection. 另外你說的佔用記憶體應是
09/24 03:02, 19F

09/24 03:03, , 20F
file system 的 buffer cache 機制, 的確你所說的不
09/24 03:03, 20F

09/24 03:04, , 21F
停的寫檔案, 可能會使得系統的 buffer cache 一直被
09/24 03:04, 21F

09/24 03:05, , 22F
你寫檔案的 process 所佔據, 但那只是如同 cache 一
09/24 03:05, 22F

09/24 03:06, , 23F
般的效應, 因為你有在寫檔案所以把那些 buffer cache
09/24 03:06, 23F

09/24 03:06, , 24F
分給你用而已, 但事實上所用的量都在作業系統的設計
09/24 03:06, 24F

09/24 03:07, , 25F
裡面.
09/24 03:07, 25F

09/24 03:08, , 26F
最後還是建議你, 作業系統的課本去翻一翻. 另外推薦
09/24 03:08, 26F

09/24 03:09, , 27F
你 "Design of the UNIX Operating System" 這本老書
09/24 03:09, 27F

09/24 03:09, , 28F
很多你在版上問的問題看完後都能自己解答
09/24 03:09, 28F

09/24 03:09, , 29F
但我想你大概也不會去看,不然就不會一直問類似的問題
09/24 03:09, 29F

09/24 03:09, , 30F
09/24 03:09, 30F

09/24 03:17, , 31F
順帶一提我認為你其實不懂 memory leak 的真正涵意
09/24 03:17, 31F
文章代碼(AID): #1CbrOyH9 (C_and_CPP)