c語言回收內存
1. linux的C語言開線程後如何歸還使用的內存
線程自身用的內存,是在棧上系統自動分配,或自己配置(操作系統提供了可編程配置參數,但也是操作系統在管理)。線程運行完成後返回棧內存操作系統會自動回收。需要注意的是,如果是在線程運行中中,使用malloc或操作系統的內存分配函數分配的內存,需要在線程返回前或返回後顯示釋放。自己編寫代碼,顯示調用free或操作系統提供的內存釋放函數。
2. 濡傛灉鐢–璇璦緙栧啓涓涓紼嬪簭鐢ㄤ簡malloc鍑芥暟浣嗘槸娌$敤free鍑芥暟錛岄偅鏁翠釜紼嬪簭緇撴潫鍚庢硠婕忕殑鍐呭瓨浼氳鏀跺洖鍚楋紵
浼氱▼搴忕粨鏉熷悗娉勬紡鐨勫唴瀛樹細琚鏀跺洖鐨勩傚洜涓虹▼搴忕粨鏉熷悗錛岃ョ▼搴忔墍鍗犵敤鐨勬墍鏈夌殑鍐呭瓨閮戒細琚鏀朵細銆傜▼搴忔墍鐢ㄧ殑鍐呭瓨鍖呮嫭闈欐佸彉閲忓拰鍔ㄦ佸彉閲忥紝鍔ㄦ佸彉閲忓彲浠ュ湪紼嬪簭涓鐢╩alloc鍜宖ree鍔ㄦ佷慨鏀圭▼搴忔墍鍗犵敤鐨勫唴瀛樼┖闂達紝闈欐佸彉閲忓垯鍦ㄥ畠涓寮濮嬪畾涔夊埌紼嬪簭緇撴潫鍓嶉兘浼氬崰鐢ㄥ唴瀛樼┖闂達紝鐩村埌紼嬪簭緇撴潫鏃舵墠浼氳閲婃斁銆俶alloc鍑芥暟鏄鍦ㄧ▼搴忎腑鍔ㄦ佸悜緋葷粺鐢寵峰唴瀛樺崟鍏冿紝涓嶇敤榪欎簺鍗曞厓鏃訛紝鍙浠ョ敤free鍑芥暟鍔ㄦ侀噴鏀撅紝榪欐牱紼嬪簭鎵鍗犵敤鐨勫唴瀛樺氨浼氬噺灝戱紝鍋囧傛病鐢╢ree鍑芥暟閲婃斁錛岄偅紼嬪簭鎵鍗犵敤鐨勫唴瀛樹笉浼氬噺灝戱紝浣嗗埌紼嬪簭緇撴潫鏃訛紝瀹冩墍鍗犵敤鐨勫唴瀛樺崟鍏冿紙鍖呮嫭闈欐佸彉閲忓拰鍔ㄦ佸彉閲忕瓑錛夐兘浼氬叏閮ㄨ緋葷粺鏀朵細銆
3. 在C語言進行編程中,為什麼要釋放舊內存
我們老師說的是C++ 沒有回收動態申請內存的機制。需要主動釋放。JAVA等高級語言有這種機制。剛查了下貌似C++確實沒有。
即是說C/C++ 都需要主動釋放動態申請的內存。
試著解釋下為什麼要主動釋放動態申請的內存:
1.動態申請的內存,存儲在堆中,編譯器不會自己回收,回收的意義:通俗講就是告訴編譯器,這片內存可以使用。
如果不被回收,這片內存就永遠都不會被重新利用。也就是內存泄露。
例如 int *a=(int *)malloc (sizeof(int)*4);
2.現在只有a這個指針指向這片動態申請的內存,再沒有別的路徑可以找到這片內存空間了。如果在釋放a所指向的內存空間之前就改變了a的指向,那麼可知,這片內存,將不可能再被找到了。那麼這片內存就不會被釋放,也就是上面說到的內存泄露。
4. C語言 分配內存不回收的後果
內存泄漏會因為減少可用內存的數量從而降低計算機的性能。最終,在最糟糕的情況下,過多的可用內存被分配掉導致全部或部分設備停止正常工作,或者應用程序崩潰。
內存泄漏可能不嚴重,甚至能夠被常規的手段檢測出來。在現代操作系統中,一個應用程序使用的常規內存在程序終止時被釋放。這表示一個短暫運行的應用程序中的內存泄漏不會導致嚴重後果。
在以下情況,內存泄漏導致較嚴重的後果:
* 程序運行後置之不理,並且隨著時間的流失消耗越來越多的內存(比如伺服器上的後台任務,尤其是嵌入式系統中的後台任務,這些任務可能被運行後很多年內都置之不理)
* 新的內存被頻繁地分配,比如當顯示電腦游戲或動畫視頻畫面時
* 程序能夠請求未被釋放的內存(比如共享內存),甚至是在程序終止的時候
* 泄漏在操作系統內部發生
* 泄漏在系統關鍵驅動中發生
* 內存非常有限,比如在嵌入式系統或便攜設備中
* 當運行於一個終止時內存並不自動釋放的操作系統(比如AmigaOS)之上,而且一旦丟失只能通過重啟來恢復。
5. 運行完C語言程序需要把內存回收
1.不回收就會在內存里占著,這段內存不能重新分配使用了。你的程序運行越久,機器內存不能用的越多,後來完全就是卡。。很卡。。非常卡。。機器卡死這樣
2.重啟會斷電的,內存一旦斷電就清0了
3.這個問題不專業,內存是由每個程序申請使用的,如果你的程序自己不做好控制,把該釋放的釋放掉,那麼win7和vs2010也沒有辦法