看板 C_and_CPP 關於我們 聯絡資訊
我嘗試去寫一個在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