[問題] memory leak in Linux application

看板C_and_CPP (C/C++)作者 (Life is random)時間16年前 (2009/10/03 00:49), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/2 (看更多)
我嘗試去寫一個在Linux上執行的程式 裡面故意去不斷得malloc一塊記憶體 然後故意不去free 大概是 void *p; int main(){ while(1){ func(); p=NULL; sleep(1); } } void func(){ p=malloc(1024*100); } 執行一段時間後確實會看到系統可用的記憶體在減少 但是我發現我的測試程式所使用的記憶體也不斷再增加 我的問題是 1.既然是memory leak就應該不會有辦法知道此程式所佔的記憶體正在增加 因為它所配置的記憶體有pointer指向地應該固定大小就是100KB 為何Linux還會知道它使用的記憶體再增加呢? 2.當我把測試程式kill 系統被他消耗掉的大部分都又長回來了 memory leak應該就無法在被回收 因為已經沒有pointer指向它了 為何Linux還有辦法將它們回收呢? 3.要如何寫一個會產生memory leak且系統完全無法將他回收的程式呢? Thanks -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.11.193.247

10/03 00:58, , 1F
memory leak 一般是指你自己的程式所 malloc 出來但無法掌控
10/03 00:58, 1F

10/03 00:59, , 2F
的那些記憶體, 除非系統本身的記憶體管理出問題, 不然要寫
10/03 00:59, 2F

10/03 00:59, , 3F
一個系統無法回收的(已結束的)程式應該是不太可能
10/03 00:59, 3F

10/03 01:00, , 4F
畢竟你的記憶體都是向系統要的, 他會知道你拿走了多少
10/03 01:00, 4F

10/03 01:15, , 5F
要寫到kernel space的程式才有可能讓它無法回收
10/03 01:15, 5F

10/03 10:53, , 6F
Thanks
10/03 10:53, 6F
文章代碼(AID): #1AnYyr4x (C_and_CPP)
文章代碼(AID): #1AnYyr4x (C_and_CPP)