作者crreep (Life is random)
看板C_and_CPP
標題[問題] memory leak in Linux application
時間Sat Oct 3 00:49:56 2009
我嘗試去寫一個在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
推 ledia:memory leak 一般是指你自己的程式所 malloc 出來但無法掌控 10/03 00:58
→ ledia:的那些記憶體, 除非系統本身的記憶體管理出問題, 不然要寫 10/03 00:59
→ ledia:一個系統無法回收的(已結束的)程式應該是不太可能 10/03 00:59
→ ledia:畢竟你的記憶體都是向系統要的, 他會知道你拿走了多少 10/03 01:00
→ james732:要寫到kernel space的程式才有可能讓它無法回收 10/03 01:15
→ crreep:Thanks 10/03 10:53