當前位置:首頁 » 編程語言 » c語言內存回收

c語言內存回收

發布時間: 2022-12-30 06:12:57

A. c語言 分配內存不回收的後果

內存泄漏會因為減少可用內存的數量從而降低計算機的性能。最終,在最糟糕的情況下,過多的可用內存被分配掉導致全部或部分設備停止正常工作,或者應用程序崩潰。
內存泄漏可能不嚴重,甚至能夠被常規的手段檢測出來。在現代操作系統中,一個應用程序使用的常規內存在程序終止時被釋放。這表示一個短暫運行的應用程序中的內存泄漏不會導致嚴重後果。
在以下情況,內存泄漏導致較嚴重的後果:
* 程序運行後置之不理,並且隨著時間的流失消耗越來越多的內存(比如伺服器上的後台任務,尤其是嵌入式系統中的後台任務,這些任務可能被運行後很多年內都置之不理)
* 新的內存被頻繁地分配,比如當顯示電腦游戲或動畫視頻畫面時
* 程序能夠請求未被釋放的內存(比如共享內存),甚至是在程序終止的時候
* 泄漏在操作系統內部發生
* 泄漏在系統關鍵驅動中發生
* 內存非常有限,比如在嵌入式系統或便攜設備中
* 當運行於一個終止時內存並不自動釋放的操作系統(比如AmigaOS)之上,而且一旦丟失只能通過重啟來恢復。

B. 我寫了一個C語言垃圾回收器,可用於C程序的內存回收。這個有利用價值嗎

沒有代碼或者運行時效果你叫我們怎麼評價?性能表現?效果如何?反應如何?都不知道。。。。

不過就我看來,native code使用GC的意義不算大。。。既然使用native code說明隨性能要求很嚴格,使用GC不如自行進行內存管理。。

嘛,說那麼多還是想說樓主這個雖然對c價值不太大,但如果你堅持的話,GC這個東西本身是很有價值的,比如託管代碼(例如.NET平台)、動態語言(例如Ruby)等領域都是很有價值的的研究方向。。。

祝你成功

C. C語言中使用malloc分配內存後沒有回收,有辦法解決么

7.5 free 和 delete 把指針怎麼啦?
別看 free 和 delete 的名字惡狠狠的(尤其是 delete) ,它們只是把指針所指的內存給
釋放掉,但並沒有把指針本身幹掉。
用調試器跟蹤示例 7-5,發現指針 p 被 free 以後其地址仍然不變(非 NULL) ,只是
該地址對應的內存是垃圾,p 成了「野指針」 。如果此時不把 p 設置為 NULL,會讓人誤
以為 p 是個合法的指針。
如果程序比較長,我們有時記不住 p 所指的內存是否已經被釋放,在繼續使用 p 之
前,通常會用語句 if (p != NULL)進行防錯處理。很遺憾,此時 if 語句起不到防錯作用,
因為即便 p 不是 NULL 指針,它也不指向合法的內存塊。

char *p = (char *) malloc(100);
strcpy(p, 「hello」);
free(p); // p 所指的內存被釋放,但是 p 所指的地址仍然不變

if(p != NULL) // 沒有起到防錯作用
{
strcpy(p, 「world」); // 出錯
}
示例 7-5 p 成為野指針

7.6 動態內存會被自動釋放嗎?
7.7 杜絕「野指針」
7.8 有了 malloc/free 為什麼還要 new/delete ?
7.9 內存耗盡怎麼辦?

7.10 malloc/free 的使用要點

7.11 new/delete 的使用要點
7.12 一些心得體會

參考文獻:

高質量 C++/C 編程指南 - 林銳 2001

D. 運行完C語言程序需要把內存回收

1.不回收就會在內存里占著,這段內存不能重新分配使用了。你的程序運行越久,機器內存不能用的越多,後來完全就是卡。。很卡。。非常卡。。機器卡死這樣
2.重啟會斷電的,內存一旦斷電就清0了
3.這個問題不專業,內存是由每個程序申請使用的,如果你的程序自己不做好控制,把該釋放的釋放掉,那麼win7和vs2010也沒有辦法

E. c語言中被調用函數中變數的內存回收問題

「wawawa」是個常量,而不是變數,就更談不上局部和全局之說了。你的程序只是將指針指向了這個常量,所以P的內容是確定的。

F. c語言中程序結束時,動態內存會釋放嗎是由誰釋放的

1 從C語言本身設計來說,不會釋放。x0dx0a所謂動態內存,是由malloc系列函數進行申請的內存,除非在程序中使用free釋放,否則該段內存不會被釋放掉。x0dx0a從這個角度來說,即使進程結束,該段內存也會被佔用。這種現象被稱為內存泄露。x0dx0a2 大多數操作系統可以智能釋放。x0dx0a動態內存由於是進程使用,向操作系統控制方申請的內存,所以操作系統內核可以記錄哪些內存由哪個進程使用,這樣為了減少內存泄露的危害,操作系統內核均實現了在進程退出後,進程分配的自用內存自動回收的機制。x0dx0a3 仍要避免在書寫只分配不釋放的代碼。x0dx0a作為代碼編寫者,要遵從C語言要求的自行釋放不用內存的規則,使程序盡量少佔用資源。否則是對內存資源的浪費。

G. c語言內存怎麼回收和代碼是什麼

在C語言中,使用malloc來動態申請內存,申請完後必須釋放該空間。如果不手動釋放,那麼只能等程序運行結束後系統去回收,但在程序運行過程中容易造成內存溢出的問題,所以應該使用free(void*)來手動釋放申請的空間,這樣可以保證程序的健壯性。案例如下:x0dx0a #include "stdio.h"x0dx0a #include "stdlib.h"x0dx0a #include "string.h"x0dx0a void main()x0dx0a {x0dx0a //申請20個位元組空間x0dx0a char *str = (char*)malloc(20);x0dx0a //將空間內容設置為\0x0dx0a memset(str, '\0', 20);x0dx0a //為每個位元組空間賦值x0dx0a char *p = str;x0dx0a for (int i = 0; i < 10; i++)x0dx0a {x0dx0a *p++ = 'a' + i;x0dx0a }x0dx0a printf("str=%s\n",str);x0dx0a //釋放申請的空間,交回給系統x0dx0a free(str);x0dx0a }x0dx0a運行結果為:x0dx0astr=abcdefghijx0dx0aPress any key to continuex0dx0a x0dx0a這個案例很簡單,但也很能說明問題,我想應該對你幫助,呵呵。x0dx0a x0dx0a補充:在C++中,動態申請空間使用new方法(new方法底層調用的其實是malloc方法),釋放時使用delete方法(底層調用的是free)。

H. 運行完C語言程序需要把內存回收

如果操作系統是Windows等成熟的系統的話,程序運行結束之後系統會自動把內存收回。否則的話,由於可用內存減少,機器上的程序運行會越來越慢,甚至完全無法運行……只要機器徹底重啟,被佔用的內存會被釋放

I. 在C語言進行編程中,為什麼要釋放舊內存

我們老師說的是C++
沒有回收動態申請內存的機制。需要主動釋放。JAVA等高級語言有這種機制。剛查了下貌似C++確實沒有。
即是說C/C++
都需要主動釋放動態申請的內存。
試著解釋下為什麼要主動釋放動態申請的內存:
1.動態申請的內存,存儲在堆中,編譯器不會自己回收,回收的意義:通俗講就是告訴編譯器,這片內存可以使用。
如果不被回收,這片內存就永遠都不會被重新利用。也就是內存泄露。
例如
int
*a=(int
*)malloc
(sizeof(int)*4);
2.現在只有a這個指針指向這片動態申請的內存,再沒有別的路徑可以找到這片內存空間了。如果在釋放a所指向的內存空間之前就改變了a的指向,那麼可知,這片內存,將不可能再被找到了。那麼這片內存就不會被釋放,也就是上面說到的內存泄露。

J. C語言內存回收機制

是已經被回收了,這樣用時有問題。應該
char
*f(){
char
*buf=(char*)malloc(5);
strcpy(buf,
"abc");
return
buf;
}
用後記得free。

熱點內容
redhat存儲 發布:2025-07-02 11:12:50 瀏覽:585
優酷不能用流量緩存 發布:2025-07-02 11:10:46 瀏覽:940
彩虹島小草怎麼設置腳本 發布:2025-07-02 11:10:33 瀏覽:921
越壓縮越封閉 發布:2025-07-02 11:09:10 瀏覽:90
jre下載linux 發布:2025-07-02 11:07:43 瀏覽:219
安卓手機換行如何操作 發布:2025-07-02 11:03:12 瀏覽:547
玩客雲伺服器搭建 發布:2025-07-02 10:59:58 瀏覽:357
假笑資料庫 發布:2025-07-02 10:59:09 瀏覽:850
手機怎麼製作腳本 發布:2025-07-02 10:59:05 瀏覽:366
mybatis的動態sql語句 發布:2025-07-02 10:56:51 瀏覽:958