欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>可編程邏輯>說到C語言編程程序的內(nèi)存是個(gè)重要問題,那如何布局呢 ?資料下載

說到C語言編程程序的內(nèi)存是個(gè)重要問題,那如何布局呢 ?資料下載

2021-04-22 | pdf | 100.02KB | 次下載 | 2積分

資料介紹

?一:C語言程序的存儲區(qū)域 ??由C語言代碼(文本文件)形成可執(zhí)行程序(二進(jìn)制文件),需要經(jīng)過編譯-匯編-連接三個(gè)階段。編譯過程把C語言文本文件生成匯編程序,匯編過程把匯編程序形成二進(jìn)制機(jī)器代碼,連接過程則將各個(gè)源文件生成的二進(jìn)制機(jī)器代碼文件組合成一個(gè)文件。 ??C語言編寫的程序經(jīng)過編譯-連接后,將形成一個(gè)統(tǒng)一文件,它由幾個(gè)部分組成。在程序運(yùn)行時(shí)又會產(chǎn)生其他幾個(gè)部分,各個(gè)部分代表了不同的存儲區(qū)域: ??1、代碼段(Code或Text) ??代碼段由程序中執(zhí)行的機(jī)器代碼組成。在C語言中,程序語句進(jìn)行編譯后,形成機(jī)器代碼。在執(zhí)行程序的過程中,CPU的程序計(jì)數(shù)器指向代碼段的每一條機(jī)器代碼,并由處理器依次運(yùn)行。 ??2、只讀數(shù)據(jù)段(RO data) ??只讀數(shù)據(jù)段是程序使用的一些不會被更改的數(shù)據(jù),使用這些數(shù)據(jù)的方式類似查表式的操作,由于這些變量不需要更改,因此只需要放置在只讀存儲器中即可。 ??3、已初始化讀寫數(shù)據(jù)段(RW data) ??已初始化數(shù)據(jù)是在程序中聲明,并且具有初值的變量,這些變量需要占用存儲器的空間,在程序執(zhí)行時(shí)它們需要位于可讀寫的內(nèi)存區(qū)域內(nèi),并具有初值,以供程序運(yùn)行時(shí)讀寫。 ??4、未初始化數(shù)據(jù)段(BSS) ??未初始化數(shù)據(jù)是在程序中聲明,但是沒有初始化的變量,這些變量在程序運(yùn)行之前不需要占用存儲器的空間。 ??5、堆(heap) ??堆內(nèi)存只在程序運(yùn)行時(shí)出現(xiàn),一般由程序員分配和釋放。在具有操作系統(tǒng)的情況下,如果程序沒有釋放,操作系統(tǒng)可能在程序(例如一個(gè)進(jìn)程)結(jié)束后回收內(nèi)存。 ??6、棧(stack) ??棧內(nèi)存只在程序運(yùn)行時(shí)出現(xiàn),在函數(shù)內(nèi)部使用的變量、函數(shù)的參數(shù)以及返回值將使用??臻g,??臻g由編譯器自動分配和釋放。 ??C語言目標(biāo)文件的內(nèi)存布局 ??看一個(gè)例子: ??int a = 0; //全局初始化區(qū),。data段 ??static int b=20; //全局初始化區(qū),。data段 ??char *p1; //全局未初始化區(qū) .bss段 ??const int A = 10; //.rodata段 ??void main(void) ??{ ??int b; //棧 ??char s[] = "abc"; //棧 ??char *p2; //棧 ??static int c = 0; //全局(靜態(tài))初始化區(qū) .data段 ??char *p3 = "123456"; //123456\0在常量區(qū),p3 在棧上。 ??p1 = (char*) malloc(10);//分配得來的10和20個(gè)字節(jié)的區(qū)域就在堆區(qū) ??p2 = (char*) malloc(20); ??strcpy(p1, "123456"); //123456\0 在常量區(qū),編譯器可能會將它與p3所指向的"123456"優(yōu)化成一個(gè)地方 ??} ??代碼段、只讀數(shù)據(jù)段、讀寫數(shù)據(jù)段、未初始化數(shù)據(jù)段屬于靜態(tài)區(qū)域,而堆和棧屬于動態(tài)區(qū)域。代碼段、只讀數(shù)據(jù)段和讀寫數(shù)據(jù)段將在鏈接之后產(chǎn)生,未初始化數(shù)據(jù)段將在程序初始化的時(shí)候開辟,而堆和棧將在程序的運(yùn)行中分配和釋放。C語言程序分為映像和運(yùn)行時(shí)兩種狀態(tài)。在編譯-連接后形成的映像中,將只包含代碼段(Text)、只讀數(shù)據(jù)段(RO Data)和讀寫數(shù)據(jù)段(RW Data)。在程序運(yùn)行之前,將動態(tài)生成未初始化數(shù)據(jù)段(BSS),在程序的運(yùn)行時(shí)還將動態(tài)形成堆(Heap)區(qū)域和棧(Stack)區(qū)域。一般來說,在靜態(tài)的映像文件中,各個(gè)部分稱之為節(jié)(Section),而在運(yùn)行時(shí)的各個(gè)部分稱之為段(Segment)。如果不詳細(xì)區(qū)分,可以統(tǒng)稱為段。 ??知識點(diǎn): ??C語言在編譯和連接后,將生成代碼段(Text)、只讀數(shù)據(jù)段(RO Data)和讀寫數(shù)據(jù)段(RW Data)。在運(yùn)行時(shí),除了以上三個(gè)區(qū)域外,還包括未初始化數(shù)據(jù)段(BSS)區(qū)域和堆(Heap)區(qū)域和棧(Stack)區(qū)域。 ??二:C語言程序的段 ??1、代碼段(code或text) ??代碼段由各個(gè)函數(shù)產(chǎn)生,函數(shù)的每一個(gè)語句將最終經(jīng)過編繹和匯編生成二進(jìn)制機(jī)器代碼(具體生生哪種體系結(jié)構(gòu)的機(jī)器代碼由編譯器決定)。 ??2、只讀數(shù)據(jù)段(RO Data) ??只讀數(shù)據(jù)段由程序中所使用的數(shù)據(jù)產(chǎn)生,該部分?jǐn)?shù)據(jù)的特點(diǎn)是在運(yùn)行中不需要改變,因此編譯器會將該數(shù)據(jù)段放入只讀的部分中。C語言中的只讀全局變量,只讀局部變量,程序中使用的常量等會在編譯時(shí)被放入到只讀數(shù)據(jù)區(qū)。 ??注意:定義全局變量const char a[100]={"ABCDEFG"};將生成大小為100個(gè)字節(jié)的只讀數(shù)據(jù)區(qū),并使用“ABCDEFG”初始化。如果定義為:const char a[ ]={"ABCDEFG"};則根據(jù)字符串長度生成8個(gè)字節(jié)的只讀數(shù)據(jù)段(還有’\0’),所以在只讀數(shù)據(jù)段中,一般都需要做完全的初始化。 ??3、讀寫數(shù)據(jù)段(RW Data) ??讀寫數(shù)據(jù)段表示了在目標(biāo)文件中一部分可以讀也可以寫的數(shù)據(jù)區(qū),在某些場合它們又被稱為已初始化數(shù)據(jù)段,這部分?jǐn)?shù)據(jù)段和代碼段,與只讀數(shù)據(jù)段一樣都屬于程序中的靜態(tài)區(qū)域,但具有可寫性的特點(diǎn)。通常已初始化的全局變量和局部靜態(tài)變量被放在了讀寫數(shù)據(jù)段,如: 在函數(shù)中定義static char b[ 100]={“ABCDEFG”};讀寫數(shù)據(jù)區(qū)的特點(diǎn)是必須在程序經(jīng)過初始化,如果只定義,沒初始值,則不會生成讀寫數(shù)據(jù)區(qū),而會定位為未初始化數(shù)據(jù)區(qū)(BSS)。如果全局變量(函數(shù)外部定義的變量)加入static修飾,這表示只能在文件內(nèi)使用,而不能被其他文件使用。 ??4、未初始化數(shù)據(jù)段(BSS) ??與讀寫數(shù)據(jù)段類似,它也屬于靜態(tài)數(shù)據(jù)區(qū),但是該段中的數(shù)據(jù)沒有經(jīng)過初始化。因此它只會在目標(biāo)文件中被標(biāo)識,而不會真正稱為目標(biāo)文件中的一段,該段將會在運(yùn)行時(shí)產(chǎn)生。未初始化數(shù)據(jù)段只在運(yùn)行的初始化階段才會產(chǎn)生,因此它的大小不會影響目標(biāo)文件的大小。 ??在C語言的程序中,對變量的使用還有以下幾點(diǎn)需要注意: ??1、函數(shù)體中定義的變量通常是在棧上,不需要在程序中進(jìn)行管理,由編繹器處理。 ??2、用malloc,calloc,realloc等分配內(nèi)存的函數(shù)所分配的內(nèi)存空間在堆上,程序必須保證在使用free釋放,否則會發(fā)生內(nèi)存泄漏。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費(fèi)下載
  2. 0.00 MB  |  1491次下載  |  免費(fèi)
  3. 2單片機(jī)典型實(shí)例介紹
  4. 18.19 MB  |  95次下載  |  1 積分
  5. 3S7-200PLC編程實(shí)例詳細(xì)資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關(guān)電源原理及各功能電路詳解
  10. 0.38 MB  |  11次下載  |  免費(fèi)
  11. 6100W短波放大電路圖
  12. 0.05 MB  |  4次下載  |  3 積分
  13. 7基于單片機(jī)和 SG3525的程控開關(guān)電源設(shè)計(jì)
  14. 0.23 MB  |  4次下載  |  免費(fèi)
  15. 8基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
  16. 0.11 MB  |  4次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費(fèi)
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費(fèi)
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費(fèi)
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費(fèi)
  9. 5555集成電路應(yīng)用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費(fèi)
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費(fèi)
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費(fèi)
  15. 8開關(guān)電源設(shè)計(jì)實(shí)例指南
  16. 未知  |  21539次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537793次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191183次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138039次下載  |  免費(fèi)