所謂內(nèi)存釋放,就是將駐留在內(nèi)存中的數(shù)據(jù)從內(nèi)存中釋放出來,以提高系統(tǒng)內(nèi)存資源的利用率,進(jìn)而提升系統(tǒng)性能。在C++中,內(nèi)存分成5個區(qū),他們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。內(nèi)存中,堆和棧的區(qū)別:1、管理方式不同;2、空間大小不同;3、能否產(chǎn)生碎片不同;4、生長方向不同;5、分配方式不同;6、分配效率不同。
內(nèi)存釋放_內(nèi)存釋放 -電腦內(nèi)存釋放
推薦方法:1. 第一步: 在桌面上點擊右鍵建立一個文本文檔;
內(nèi)存釋放
第二步: 在此文本文檔中編輯Mystart=space(50000000)
第三步:保存此文檔文件名為“xxx.vbs”,xxx為你自己所命名的文檔名,關(guān)鍵是后綴為.vbs
第四步:保存類型為“所有文件”,保存文檔在桌面上。
2. 第一步:打開 注冊表[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
下,刪除不必要的開機(jī)啟動項。例如:kugoo、3721、qq、dudu加速、realone、msn 等。
第二步:控制面板-管理工具-服務(wù) 禁用 掉沒有必要的windows服務(wù) 例如:windows自帶刻錄功能、messenger、net logon、auto update、Wireless Zero Configuration、Computer Browse;
第三步:到c:windows下找Prefetch文件夾,將其下的所有文件全部刪除;
第四步:減少桌面圖標(biāo),盡量從 開始-程序 中啟動軟件?;蛟谧烂娼?文件夾 將圖標(biāo)分類移入,啟動時先打開文件夾。
第五步:開始 -附件-系統(tǒng)工具-碎片整理。進(jìn)行碎片整理;
第六步:我的電腦-屬性-高級 第一個 設(shè)置 ,選擇調(diào)整為最佳性能 。
內(nèi)存釋放_內(nèi)存釋放 -手機(jī)內(nèi)存釋放
目前還沒有完全可靠的手機(jī)內(nèi)存整理軟件,一般手機(jī)和智能手機(jī)可以通過格式化內(nèi)存卡、操作系統(tǒng)(塞班、WindowsPC等)等方法來釋放內(nèi)存,提高開機(jī)速度。內(nèi)存釋放_內(nèi)存釋放 -應(yīng)用軟件
常用的計算機(jī)內(nèi)存整理軟件包括內(nèi)存釋放專家、超級兔子、Windows優(yōu)化大師、360安全衛(wèi)士等,部分殺毒軟件也配備了內(nèi)存整理功能。內(nèi)存釋放_內(nèi)存釋放 -內(nèi)存分配
五大內(nèi)存分區(qū)

在C++中,內(nèi)存分成5個區(qū),他們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。
棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量、函數(shù)參數(shù)等。
堆,就是那些由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個new就要對應(yīng)一個delete。如果程序員沒有釋放掉,那么在程序結(jié)束后,操作系統(tǒng)會自動回收。
自由存儲區(qū),就是那些由malloc等分配的內(nèi)存塊,他和堆是十分相似的,不過它是用free來結(jié)束自己的生命的。
全局/靜態(tài)存儲區(qū),全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)。
常量存儲區(qū),這是一塊比較特殊的存儲區(qū),他們里面存放的是常量,不允許修改(當(dāng)然,你要通過非正當(dāng)手段也可以修改,而且方法很多)
內(nèi)存中,堆和棧的區(qū)別
初學(xué)內(nèi)存的時候,免不了對堆和棧的學(xué)習(xí)了解。很多初學(xué)者對這一問題都很敏感!甚至一些“老手”對這一問題也有一些疑問。搞清楚堆區(qū)和棧區(qū)的區(qū)別,是我們學(xué)習(xí),了解內(nèi)存并進(jìn)一步應(yīng)用的必經(jīng)階段!主要的區(qū)別由以下幾點:
1、管理方式不同;
2、空間大小不同;
3、能否產(chǎn)生碎片不同;
4、生長方向不同;
5、分配方式不同;
6、分配效率不同;
管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產(chǎn)生memory leak。
空間大?。阂话銇碇v在32位系統(tǒng)下,堆內(nèi)存可以達(dá)到4G的空間,從這個角度來看堆內(nèi)存幾乎是沒有什么限制的。但是對于棧來講,一般都是有一定的空間大小的,例如,在VC6下面,默認(rèn)的棧空間大小是1M(好像是,記不清楚了)。當(dāng)然,我們可以修改:
打開工程,依次操作菜單如下:Project->Setting->Link,在Category 中選中Output,然后在Reserve中設(shè)定堆棧的最大值和commit。
注意:reserve最小值為4Byte;commit是保留在虛擬內(nèi)存的頁文件里面,它設(shè)置的較大會使棧開辟較大的值,可能增加內(nèi)存的開銷和啟動時間。
碎片問題:對于堆來講,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個問題,因為棧是先進(jìn)后出的隊列,他們是如此的一一對應(yīng),以至于永遠(yuǎn)都不可能有一個內(nèi)存塊從棧中間彈出,在他彈出之前,在他上面的后進(jìn)的棧內(nèi)容已經(jīng)被彈出,詳細(xì)的可以參考數(shù)據(jù)結(jié)構(gòu),這里我們就不再一一討論了。
生長方向:對于堆來講,生長方向是向上的,也就是向著內(nèi)存地址增加的方向;對于棧來講,它的生長方向是向下的,是向著內(nèi)存地址減小的方向增長。
分配方式:堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由alloca函數(shù)進(jìn)行分配,但是棧的動態(tài)分配和堆是不同的,他的動態(tài)分配是由編譯器進(jìn)行釋放,無需我們手工實現(xiàn)。
分配效率:棧是機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計算機(jī)會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí)行,這就決定了棧的效率比較高。堆則是C/C++函數(shù)庫提供的,它的機(jī)制是很復(fù)雜的,例如為了分配一塊內(nèi)存,庫函數(shù)會按照一定的算法(具體的算法可以參考數(shù)據(jù)結(jié)構(gòu)/操作系統(tǒng))在堆內(nèi)存中搜索可用的足夠大小的空間,如果沒有足夠大小的空間(可能是由于內(nèi)存碎片太多),就有可能調(diào)用系統(tǒng)功能去增加程序數(shù)據(jù)段的內(nèi)存空間,這樣就有機(jī)會分到足夠大小的內(nèi)存,然后進(jìn)行返回。顯然,堆的效率比棧要低得多。
從這里我們可以看到,堆和棧相比,由于大量new/delete的使用,容易造成大量的內(nèi)存碎片;由于沒有專門的系統(tǒng)支持,效率很低;由于可能引發(fā)用戶態(tài)和核心態(tài)的切換,內(nèi)存的申請,代價變得更加昂貴。所以棧在程序中是應(yīng)用最廣泛的,就算是函數(shù)的調(diào)用也利用棧去完成,函數(shù)調(diào)用過程中的參數(shù),返回地址,EBP和局部變量都采用棧的方式存放。所以,我們推薦大家盡量用棧,而不是用堆。
雖然棧有如此眾多的好處,但是由于和堆相比不是那么靈活,有時候分配大量的內(nèi)存空間,還是用堆好一些。
無論是堆還是棧,都要防止越界現(xiàn)象的發(fā)生(除非你是故意使其越界),因為越界的結(jié)果要么是程序崩潰,要么是摧毀程序的堆、棧結(jié)構(gòu),產(chǎn)生以想不到的結(jié)果,就算是在你的程序運(yùn)行過程中,沒有發(fā)生上面的問題,你還是要小心,說不定什么時候就崩掉,那時候debug可是相當(dāng)困難的!
因此,在構(gòu)建程序的時候防止越界現(xiàn)象的發(fā)生,讓你的程序更健康!
愛華網(wǎng)本文地址 » http://www.klfzs.com/a/8103330103/61471.html
愛華網(wǎng)



