01-內(nèi)存四區(qū)專題講座_第1頁
01-內(nèi)存四區(qū)專題講座_第2頁
01-內(nèi)存四區(qū)專題講座_第3頁
01-內(nèi)存四區(qū)專題講座_第4頁
01-內(nèi)存四區(qū)專題講座_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

講師:王保明博客:http:///baoming_wangMail:iambombing@126.com網(wǎng)址:http://C語言C++語言傳智播客高薪就業(yè)程序內(nèi)存四區(qū)專題講座專題講座內(nèi)存四區(qū)

01數(shù)據(jù)類型分析

02變量分析

03

程序內(nèi)存模型

04小結(jié)01數(shù)據(jù)類型“類型”是對數(shù)據(jù)的抽象類型相同的數(shù)據(jù)有相同的表示形式、存儲格式以及相關(guān)的操作程序中使用的所有數(shù)據(jù)都必定屬于某一種數(shù)據(jù)類型1數(shù)據(jù)類型概念(回顧01)01關(guān)于那套接口、套路感覺好難啊,聽課能聽的懂嗎?達到什么標準可以聽王老師講課???標準,熱熱身。。01數(shù)據(jù)類型1數(shù)據(jù)類型概念(回顧2)01數(shù)據(jù)類型2數(shù)據(jù)類型本質(zhì)是什么

思考數(shù)據(jù)類型和內(nèi)存有關(guān)系嗎?C/C++為什么會引入數(shù)據(jù)類型?01數(shù)據(jù)類型2數(shù)據(jù)類型本質(zhì)

數(shù)據(jù)類型可理解為創(chuàng)建變量的模具(模子);是固定內(nèi)存大小的別名。數(shù)據(jù)類型的作用:編譯器預(yù)算對象(變量)分配的內(nèi)存空間大小程序舉例,如何求數(shù)據(jù)類型的大小sizeof(int

*)

請問:數(shù)據(jù)類型可以有別名嗎?請問:數(shù)據(jù)類型可以自定義嗎?01數(shù)據(jù)類型2數(shù)據(jù)類型本質(zhì)

數(shù)據(jù)類型可理解為創(chuàng)建變量的模具(模子);是固定內(nèi)存大小的別名。數(shù)據(jù)類型的作用:編譯器預(yù)算對象(變量)分配的內(nèi)存空間大小程序舉例,如何求數(shù)據(jù)類型的大小sizeof(int

*)01數(shù)據(jù)類型數(shù)據(jù)類型大小intmain(){inta=10;intb[10];printf("inta:%d\n",sizeof(a));printf("inta:%d\n",sizeof(int*));printf("intb:%d\n",sizeof(b));printf("intb:%d\n",sizeof(b[0]));printf("intb:%d\n",sizeof(*b));printf("hello.....\n");getchar();return0;}sizeof是操作符,不是函數(shù);sizeof測量的實體大小為編譯期間就已確定01數(shù)據(jù)類型2數(shù)據(jù)數(shù)據(jù)類型別名

數(shù)據(jù)類型可以理解為固定大小內(nèi)存塊的別名,請問數(shù)據(jù)類型可以起別名嗎?01數(shù)據(jù)類型2數(shù)據(jù)類型別名練習intmain(){ //Teachert1; printf("Teacher:%d\n",sizeof(Teacher)); printf("u32:%d\n",sizeof(u32)); printf("u8:%d\n",sizeof(u8)); printf("hello.....\n"); getchar(); return0;}01數(shù)據(jù)類型3數(shù)據(jù)類型封裝11、void的字面意思是“無類型”,void*則為“無類型指針”,void*可以指向任何類型的數(shù)據(jù)。2、用法1:數(shù)據(jù)類型的封裝

intInitHardEnv(void**handle);

典型的如內(nèi)存操作函數(shù)memcpy和memset的函數(shù)原型分別為

void*memcpy(void*dest,constvoid*src,size_tlen);

void*memset(void*buffer,intc,size_tnum);3、用法2:void修飾函數(shù)返回值和參數(shù),僅表示無。

如果函數(shù)沒有返回值,那么應(yīng)該將其聲明為void型

如果函數(shù)沒有參數(shù),應(yīng)該聲明其參數(shù)為void

intfunction(void)

{return1;}01數(shù)據(jù)類型3數(shù)據(jù)類型封裝24、void指針的意義

C語言規(guī)定只有相同類型的指針才可以相互賦值

void*指針作為左值用于“接收”任意類型的指針

void*指針作為右值賦值給其它指針時需要強制類型轉(zhuǎn)換

int*p1=NULL;Char*p2=(char*)malloc(sizoeof(char)*20);5、不存在void類型的變量

C語言沒有定義void究竟是多大內(nèi)存的別名6、擴展閱讀《void類型詳解.doc》01數(shù)據(jù)類型小結(jié)簡單!嘛?1、數(shù)據(jù)類型本質(zhì)是固定內(nèi)存大小的別名;是個模具,c語言規(guī)定:通過數(shù)據(jù)類型定義變量。2、數(shù)據(jù)類型大小計算(sizeof)3、可以給已存在的數(shù)據(jù)類型起別名typedef4、數(shù)據(jù)類型封裝概念(void萬能類型)01數(shù)據(jù)類型有關(guān)思考思考1:C語言中,函數(shù)是可以看做一種數(shù)據(jù)類型嗎?a)若是,請說明原因并進一步思考:函數(shù)這種數(shù)據(jù)類型,能再重定義嗎?b)若不是,也請說明原因。思考2:C一維數(shù)組、二維數(shù)組有數(shù)據(jù)類型嗎?intarray[10]。若有,數(shù)組類型又如何表達?又如何重定義?若沒有,也請說明原因。一維數(shù)組和一級指針的三大技術(shù)難點102變量概念:既能讀又能寫的內(nèi)存對象,稱為變量;若一旦初始化后不能修改的對象則稱為常量。變量定義形式:

類型標識符,標識符,…,標識符;1變量概念(回顧01)例如:

intx; intwordCut,Radius,Height; doubleFlightTime,Mileage,Speed;02變量概念:既能讀又能寫的內(nèi)存對象,稱為變量;若一旦初始化后不能修改的對象則稱為常量。變量定義形式:

類型標識符,標識符,…,標識符;2變量本質(zhì)是什么01例如:

intx; intwordCut,Radius,Height; doubleFlightTime,Mileage,Speed;02變量2變量本質(zhì)是什么02inta

0X0066FDF4doubleb0X0066FDEC由類型符int解釋存儲數(shù)據(jù)例如,有說明:

inta; doubleb;變量本質(zhì):(一段連續(xù))內(nèi)存空間的別名1、程序通過變量來申請和命名內(nèi)存空間inta=02、通過變量名訪問內(nèi)存空間2變量本質(zhì)是什么0302變量修改變量有幾種方法?1、直接2、間接。內(nèi)存有地址編號,拿到地址編號也可以修改內(nèi)存;于是橫空出世了!3、內(nèi)存空間可以再取給別名嗎?02變量C語言規(guī)定:通過數(shù)據(jù)類型,定義變量。3、數(shù)據(jù)類型和變量的關(guān)系02變量02變量02變量02變量小結(jié)1、變量本質(zhì)內(nèi)存空間的別名。2、變量的修改方法,三種3、通過數(shù)據(jù)類型定義變量思考2:變量三要素(名稱、大小、作用域),變量的什么周期?C++編譯器是如何管理函數(shù)1,函數(shù)2變量之間的關(guān)系的?01、內(nèi)存四區(qū)模型-建立流程02變量03程序的內(nèi)存四區(qū)模型01、內(nèi)存四區(qū)模型-建立流程說明02變量03程序的內(nèi)存模型流程說明1、操作系統(tǒng)把物理硬盤代碼load到內(nèi)存2、操作系統(tǒng)把c代碼分成四個區(qū)3、操作系統(tǒng)找到main函數(shù)入口執(zhí)行01、內(nèi)存四區(qū)模型-各個元素分析02變量03程序的內(nèi)存模型棧區(qū)(stack):由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。堆區(qū)(heap):一般由程序員分配釋放(動態(tài)內(nèi)存申請與釋放),若程序員不釋放,程序結(jié)束時可能由操作系統(tǒng)回收。全局區(qū)(靜態(tài)區(qū))(static):全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,該區(qū)域在程序結(jié)束后由操作系統(tǒng)釋放。常量區(qū):字符串常量和其他常量的存儲位置,程序結(jié)束后由操作系統(tǒng)釋放。程序代碼區(qū):存放函數(shù)體的二進制代碼。02函數(shù)調(diào)用模型main()調(diào)用fa()堆棧fa()調(diào)用fb()fb()操作系統(tǒng)運行狀態(tài)

返回地址main()的參數(shù)

main()運行狀態(tài)

返回地址fa()的參數(shù)fa()運行狀態(tài)

返回地址fb()的參數(shù)內(nèi)存模型03程序的內(nèi)存模型02函數(shù)調(diào)用模型main()調(diào)用fa()結(jié)束fa()調(diào)用fb()fb()操作系統(tǒng)運行狀態(tài)

返回地址main()的參數(shù)

main()運行狀態(tài)

返回地址fa()的參數(shù)fa()運行狀態(tài)

返回地址fb()的參數(shù)

棧3.3.1嵌套調(diào)用03、內(nèi)存四區(qū)模型和函數(shù)調(diào)用模型變量傳遞分析02變量03程序的內(nèi)存模型分析1、一個主程序有n函數(shù)組成,c++編譯器會建立有幾個堆區(qū)?有幾個棧區(qū)?2、函數(shù)嵌套調(diào)用時,實參地址傳給形參后,C++編譯器如何管理變量的生命周期?分析:函數(shù)A,調(diào)用函數(shù)B,通過參數(shù)傳遞的變量(內(nèi)存空間能用嗎?)02、函數(shù)嵌套調(diào)用與變量生命周期分析02變量03程序的內(nèi)存模型提示建立正確程序運行內(nèi)存布局圖是學好C的關(guān)鍵!03、如何建立正確的程序運行內(nèi)存布局圖02變量03程序的內(nèi)存模型內(nèi)存四區(qū)模型&函數(shù)調(diào)用模型函數(shù)內(nèi)元素深入理解數(shù)據(jù)類型和變量“內(nèi)存”屬性一級指針內(nèi)存布局圖(int*,char*)二級指針內(nèi)存布局圖(int**char**)函數(shù)間接主調(diào)函數(shù)分配內(nèi)存,還是被調(diào)用函數(shù)分配內(nèi)存主調(diào)函數(shù)如何使用被調(diào)用函數(shù)分配的內(nèi)存(技術(shù)關(guān)鍵點:指針z函數(shù)參數(shù))04、堆棧屬性練習02變量03程序的內(nèi)存模型測試heap生長方向測試stack生長方向Heap、stack生長方向和內(nèi)存存放方向是兩個不同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論