版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、CCCC的內(nèi)存機制的內(nèi)存機制一.首先,在c中分為這幾個存儲區(qū)1.棧由編譯器自動分配釋放2.堆一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收3.全局區(qū)(靜態(tài)區(qū)),全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束釋放4.專門放字符串常量的地方。程序結(jié)束釋放5程序代碼區(qū),存放2進制代碼。在函數(shù)體中定義的變量通常是在棧上,用malloc
2、callocrealloc等分配內(nèi)存的函數(shù)分配得到的就是在堆上。在所有函數(shù)體外定義的是全局量,加了static修飾符后不管在哪里都存放在全局區(qū)(靜態(tài)區(qū))在所有函數(shù)體外定義的static變量表示在該文件中有效,不能extern到別的文件用,在函數(shù)體內(nèi)定義的static表示只在該函數(shù)體內(nèi)有效。另外,函數(shù)中的“adgfdf“這樣的字符串存放在常量區(qū)。比如:inta=0全局初始化區(qū)p1全局未初始化區(qū)voidmain()intb棧s[]=“abc
3、“棧p2棧p3=“123456“123456post.content在常量區(qū),p3在棧上staticintc=0全局(靜態(tài))初始化區(qū)p1=()malloc(10)分配得來得10字節(jié)的區(qū)域在堆區(qū)p2=()malloc(20)分配得來得20字節(jié)的區(qū)域在堆區(qū)strcpy(p1“123456“)123456post.content放在常量區(qū),編譯器可能會將它與p3所指向的“123456“優(yōu)化成一塊二.在C中,內(nèi)存分成5個區(qū),他們分別是堆、棧、自
4、由存儲區(qū)、全局靜態(tài)存儲區(qū)和常堆和棧的對比從以上知識可知,棧是系統(tǒng)提供的功能,特點是快速高效,缺點是有限制,數(shù)據(jù)不靈活;而棧是函數(shù)庫提供的功能,特點是靈活方便,數(shù)據(jù)適應面廣泛,但是效率有一定降低。棧是系統(tǒng)數(shù)據(jù)結(jié)構(gòu),對于進程線程是唯一的;堆是函數(shù)庫內(nèi)部數(shù)據(jù)結(jié)構(gòu),不一定唯一。不同堆分配的內(nèi)存無法互相操作。棧空間分靜態(tài)分配和動態(tài)分配兩種。靜態(tài)分配是編譯器完成的,比如自動變量(auto)的分配。動態(tài)分配由alloca函數(shù)完成。棧的動態(tài)分配無需釋放
5、(是自動的),也就沒有釋放函數(shù)。為可移植的程序起見,棧的動態(tài)分配操作是不被鼓勵的!堆空間的分配總是動態(tài)的,雖然程序結(jié)束時所有的數(shù)據(jù)空間都會被釋放回系統(tǒng),但是精確的申請內(nèi)存釋放內(nèi)存匹配是良好程序的基本要素。1.碎片問題:對于堆來講,頻繁的new勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個問題,因為棧是先進后出的隊列,他們是如此的一一對應,以至于永遠都不可能有一個內(nèi)存塊從棧中間彈出,在他彈出之前
6、,在他上面的后進的棧內(nèi)容已經(jīng)被彈出,詳細的可以參考數(shù)據(jù)結(jié)構(gòu),這里我們就不再一一討論了。2.生長方向:對于堆來講,生長方向是向上的,也就是向著內(nèi)存地址增加的方向;對于棧來講,它的生長方向是向下的,是向著內(nèi)存地址減小的方向增長。3.分配方式:堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由alloca函數(shù)進行分配,但是棧的動態(tài)分配和堆是不同的,他的動態(tài)分配是由編
7、譯器進行釋放,無需我們手工實現(xiàn)。4.分配效率:棧是機器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí)行,這就決定了棧的效率比較高。堆則是CC函數(shù)庫提供的,它的機制是很復雜的,例如為了分配一塊內(nèi)存,庫函數(shù)會按照一定的算法(具體的算法可以參考數(shù)據(jù)結(jié)構(gòu)操作系統(tǒng))在堆內(nèi)存中搜索可用的足夠大小的空間,如果沒有足夠大小的空間(可能是由于內(nèi)存碎片太多),就有可能調(diào)用系統(tǒng)功能去增加程序數(shù)據(jù)段的內(nèi)存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- cc++讀寫配置文件
- cc++面試300題1
- cc++面試問題分類大匯總
- cc++程序自動評判系統(tǒng)【開題報告】
- cc++程序自動評判系統(tǒng)【文獻綜述】
- cc++程序自動評判系統(tǒng)【畢業(yè)設(shè)計】
- c++課程設(shè)計--程序設(shè)計基礎(chǔ)(cc++)
- cc++程序自動評判系統(tǒng)【畢業(yè)設(shè)計+開題報告+文獻綜述】
- 大工19春《cc++語言程序設(shè)計》在線作業(yè)2滿分答案
- 大工19春《cc++語言程序設(shè)計》在線作業(yè)3滿分答案
- 面向新型混合內(nèi)存架構(gòu)的內(nèi)存管理機制.pdf
- 交易數(shù)據(jù)庫中的內(nèi)存機制.pdf
- 基于內(nèi)存的MapReduce系統(tǒng)效率優(yōu)化機制研究.pdf
- 虛擬化環(huán)境下的內(nèi)存節(jié)能機制研究.pdf
- 軟件內(nèi)存錯誤的主動容忍機制研究.pdf
- 軟硬件協(xié)同管理的異構(gòu)內(nèi)存緩存機制.pdf
- 混合內(nèi)存環(huán)境下的緩存替換機制研究.pdf
- 高可用內(nèi)存?zhèn)浞菘臻g創(chuàng)建機制.pdf
- 面向Cassandra的內(nèi)存管理機制研究與實現(xiàn).pdf
- 異構(gòu)內(nèi)存環(huán)境下的系統(tǒng)狀態(tài)管理機制.pdf
評論
0/150
提交評論