版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
存儲(chǔ)管理
教學(xué)目的內(nèi)容1
教學(xué)要求2
重點(diǎn)難點(diǎn)3
教學(xué)內(nèi)容4教學(xué)目的通過(guò)本章的學(xué)習(xí),了解內(nèi)存的組織結(jié)構(gòu),了解堆和棧的不同,掌握使用動(dòng)態(tài)管理內(nèi)存的函數(shù),了解內(nèi)存在什么情況會(huì)丟失。教學(xué)要求了解內(nèi)存組織方式;區(qū)分堆和棧的不同;掌握動(dòng)態(tài)管理所用函數(shù);了解內(nèi)存丟失情況。重點(diǎn)難點(diǎn)重點(diǎn):內(nèi)存的組織方式
;
動(dòng)態(tài)管理函數(shù)。難點(diǎn):內(nèi)存丟失動(dòng)態(tài)管理函數(shù)教學(xué)內(nèi)容內(nèi)存丟失。內(nèi)存組織形式;動(dòng)態(tài)管理
;內(nèi)存組織方式1.內(nèi)存的組織方式開(kāi)發(fā)人員將程序編寫(xiě)完成之后,程序要先裝載到計(jì)算機(jī)的內(nèi)核或者半導(dǎo)體內(nèi)存中,然后再運(yùn)行程序。程序被組織成4個(gè)邏輯段:(1)可執(zhí)行代碼(2)靜態(tài)數(shù)據(jù)可執(zhí)行代碼和靜態(tài)數(shù)據(jù),存儲(chǔ)在固定的內(nèi)存位置。(3)動(dòng)態(tài)數(shù)據(jù)(堆)程序請(qǐng)求動(dòng)態(tài)分配的內(nèi)存來(lái)自?xún)?nèi)存池,也就是上面所列舉中的堆。(4)棧局部數(shù)據(jù)對(duì)象、函數(shù)的參數(shù)以及調(diào)用函數(shù)和被調(diào)用函數(shù)的聯(lián)系放在稱(chēng)為棧的內(nèi)存池中。但是以上的4類(lèi)根據(jù)操作平臺(tái)和編譯器的不同,堆和棧可以是被所有同時(shí)運(yùn)行的程序共享的操作系統(tǒng)資源,也可以是使用程序獨(dú)占的局部資源。內(nèi)存組織方式
2.堆與棧在內(nèi)存組織方式可以看到堆是用來(lái)存放動(dòng)態(tài)分配內(nèi)存空間的,而棧是用來(lái)存放局部數(shù)據(jù)對(duì)象、函數(shù)的參數(shù)、調(diào)用函數(shù)和被調(diào)用函數(shù)的聯(lián)系。接下來(lái)對(duì)兩者進(jìn)行詳細(xì)的說(shuō)明。(1)堆在內(nèi)存的全局存儲(chǔ)空間當(dāng)中,用于程序動(dòng)態(tài)分配和釋放的內(nèi)存塊稱(chēng)為自由存儲(chǔ)空間,通常也稱(chēng)之為堆。(2)棧程序不會(huì)像處理堆那樣的在棧中顯示地分配內(nèi)存。當(dāng)程序調(diào)用函數(shù)和聲明局部變量時(shí),系統(tǒng)將自動(dòng)分配內(nèi)存。棧是一個(gè)后進(jìn)先出的壓入彈出式的數(shù)據(jù)結(jié)構(gòu)。在程序運(yùn)行時(shí),是每次向棧中壓入一個(gè)對(duì)象,然后棧指針向下移動(dòng)一個(gè)位置。當(dāng)系統(tǒng)從棧中彈出一個(gè)對(duì)象時(shí),最近進(jìn)棧的對(duì)象將被彈出,然后棧指針向上移動(dòng)一個(gè)位置。如果棧指針位于棧頂,表示棧是空的;如果棧指針指向最下面的數(shù)據(jù)項(xiàng)的后一個(gè)位置,表示棧為滿的。動(dòng)態(tài)管理
1.malloc函數(shù)其函數(shù)的原型如下:void*malloc(unsignedintsize);在stdlib.h頭文件中包含該函數(shù),作用是在內(nèi)存中動(dòng)態(tài)的分配一塊size大小的內(nèi)存空間。malloc函數(shù)會(huì)返回一個(gè)指針,該指針指向分配的內(nèi)存空間,如果出現(xiàn)錯(cuò)誤返回NULL。例如使用該函數(shù)分配一個(gè)整型內(nèi)存空間:int*pInt;pInt=(int*)malloc(sizeof(int));首先定義指針pInt用來(lái)保存分配內(nèi)存的地址。在使用malloc函數(shù)分配內(nèi)存空間時(shí),需要指定具體的內(nèi)存空間的大小(size),這時(shí)調(diào)用函數(shù)sizeof就可以得到指定類(lèi)型的大小。malloc成功分配內(nèi)存空間后會(huì)返回一個(gè)指針,因?yàn)榉峙涞氖且粋€(gè)int型空間,所以在返回指針時(shí)也應(yīng)該是相對(duì)應(yīng)的int型指針,這樣的話就要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)化。最后將函數(shù)返回的指針賦值給指針pInt就可以保存動(dòng)態(tài)分配的整型空間地址了。動(dòng)態(tài)管理2.calloc函數(shù)其函數(shù)的原型如下:void*calloc(unsignedn,unsignedsize);使用該函數(shù)也要包含頭文件stdlib.h,該函數(shù)的功能是在內(nèi)存中動(dòng)態(tài)分配n個(gè)長(zhǎng)度為size的連續(xù)內(nèi)存空間數(shù)組。calloc函數(shù)會(huì)返回一個(gè)指針,該指針指向動(dòng)態(tài)分配的連續(xù)內(nèi)存空間地址。當(dāng)分配空間錯(cuò)誤時(shí),返回NULL。例如使用該函數(shù)分配一個(gè)整型數(shù)組內(nèi)存空間:int*pArray; /*定義指針*/pArray=(int*)calloc(3,sizeof(int)); /*分配內(nèi)存數(shù)組*/在上面的代碼中pArray為一個(gè)整型指針,使用calloc分配內(nèi)存數(shù)組,在參數(shù)中第一個(gè)參數(shù)表示分配數(shù)組中元素的個(gè)數(shù),而第二個(gè)參數(shù)表示元素的類(lèi)型。最后將返回的指針賦給pArray指針變量,pArray指向的就是該數(shù)組的首地址。動(dòng)態(tài)管理
3.realloc函數(shù)其函數(shù)的原型如下:void*realloc(void*ptr,size_tsize);首先使用該函數(shù)要包含頭文件stdlib.h,其功能是改變ptr指針指向的空間大小為size大小。設(shè)定的size大小可以是任意的,也就是說(shuō)可以比原來(lái)的數(shù)值大,也可以比原來(lái)的數(shù)值小。返回值是一個(gè)指向新地址的指針,如果出現(xiàn)錯(cuò)誤則返回NULL。例如改變一個(gè)分配的實(shí)型的空間大小成為整型大小:fDouble=(double*)malloc(sizeof(double));iInt=realloc(fDouble,sizeof(int));其中fDouble是指向分配的實(shí)型空間,之后使用的是realloc函數(shù)改變fDouble指向的空間的大小,其大小設(shè)置為整型,然后將改變后的內(nèi)存空間的地址返回賦值給iInt整型指針。動(dòng)態(tài)管理4.free函數(shù)其函數(shù)的原型如下:voidfree(void*ptr);該函數(shù)的功能使用由指針ptr指向的內(nèi)存區(qū),使部分內(nèi)存區(qū)能被其他變量使用。ptr是最近一次調(diào)用calloc或malloc函數(shù)時(shí)返回的值。free函數(shù)無(wú)返回值。例如釋放一個(gè)分配整型變量的內(nèi)存空間:free(pInt);代碼中pInt為一個(gè)指向一個(gè)整型大小的內(nèi)存空間,使用free將其進(jìn)行釋放。
內(nèi)存丟失
在使用malloc等函數(shù)分配內(nèi)存后,要對(duì)其使用free函數(shù)進(jìn)行釋放。因?yàn)閮?nèi)存不進(jìn)行釋放會(huì)造成內(nèi)存遺漏可能會(huì)系統(tǒng)崩潰。因?yàn)閒ree函數(shù)的用處在于實(shí)時(shí)的執(zhí)行回收內(nèi)存的操作,如果程序很簡(jiǎn)單,那么不用寫(xiě)free函數(shù)去釋放內(nèi)存也可以,當(dāng)程序結(jié)束之前也不會(huì)使用很多的內(nèi)存,不會(huì)降低系統(tǒng)的性能。當(dāng)程序結(jié)束后,操作系統(tǒng)會(huì)將完成釋放的功能。但是如果在開(kāi)發(fā)大型程序時(shí),不寫(xiě)free函數(shù)去釋放內(nèi)存是很?chē)?yán)重的。因?yàn)楹芸赡茉诔绦蛑幸貜?fù)一萬(wàn)次分配10M的內(nèi)存,那么每次進(jìn)行分配內(nèi)存后都使用free函數(shù)去釋放用完的內(nèi)存空間,那么這個(gè)程序只需要使用10M內(nèi)存就可以運(yùn)行。但是如果不使用free函數(shù),那么程序就要使用100G的內(nèi)存!因?yàn)檫@其中包括絕大部分的虛擬內(nèi)存,而由于虛擬內(nèi)存的操作是需要讀寫(xiě)磁盤(pán),因此,這樣會(huì)極大的影響到系統(tǒng)的性能,系統(tǒng)因此可能崩潰。所以在程序中編寫(xiě)malloc分配內(nèi)存時(shí)都對(duì)應(yīng)的寫(xiě)出一個(gè)free函數(shù)進(jìn)行釋放是一個(gè)良好的編程習(xí)慣,這不但體現(xiàn)在處理大型程序時(shí)的必要性,并能在一定程度上體現(xiàn)了程序優(yōu)美的風(fēng)格和健壯性。內(nèi)存丟失但是有些時(shí)候,常常會(huì)有將內(nèi)存丟失的情況,例如:pOld=(int*)malloc(sizeof(int));pNew=(int*)malloc(sizeof(int));這兩段代碼分別表示了創(chuàng)建了一塊內(nèi)存,并且將內(nèi)存的地址傳給了指針pOld和pNew。此時(shí)指針pOld和pNew分別指向兩塊內(nèi)存。如果進(jìn)行這樣的操作:pOld=pNew;進(jìn)行這樣的操作后,那
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版微粒貸逾期8萬(wàn)元債權(quán)清收合同3篇
- 2025年度木工工藝技術(shù)專(zhuān)利授權(quán)使用合同4篇
- 2025年度個(gè)人助學(xué)貸款質(zhì)押擔(dān)保合同書(shū)4篇
- 四川省瀘州市納溪區(qū)納溪中學(xué)集團(tuán)校聯(lián)考2024-2025學(xué)年九年級(jí)上學(xué)期1月期末道德與法治試題(含答案)
- 2025版小學(xué)校租賃合同附加文化活動(dòng)舉辦協(xié)議2篇
- 二零二五年度木結(jié)構(gòu)建筑清包施工合同書(shū)7篇
- 安徽省黃山市高三年級(jí)第二次質(zhì)量檢測(cè)語(yǔ)文試題(含答案)
- 2025版新型環(huán)保材料木材采購(gòu)合同模板4篇
- 2025年度個(gè)人合同糾紛解決欠款合同模板4篇
- 第三節(jié)預(yù)防策略與措施流行病學(xué)16課件講解
- 二零二五年度無(wú)人駕駛車(chē)輛測(cè)試合同免責(zé)協(xié)議書(shū)
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語(yǔ)一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過(guò)濾器性能特性的標(biāo)識(shí)
- 國(guó)際市場(chǎng)營(yíng)銷(xiāo)環(huán)境案例分析
- 美國(guó)租車(chē)自駕-中國(guó)駕照英文翻譯
評(píng)論
0/150
提交評(píng)論