色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>可編程邏輯>說到C語言編程程序的內存是個重要問題,那如何布局呢 ?資料下載

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

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

資料介紹

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

評論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537793次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費
主站蜘蛛池模板: 成人AV无码一二二区视频免费看 | 亚州中文字幕 | 亚洲中文热码在线视频 | 日本欧美久久久久免费播放网 | 被cao的奶水直喷高H | 97人人添人人澡人人澡人人澡 | 亚洲国产精品无码中文字满 | 97精品国产亚洲AV高清 | 伊人久久99热这里只有精品 | xhameter中国 | 色妞色视频一区二区三区四区 | 久久性生大片免费观看性 | 蜜桃成熟时2在线观看完整版hd | 无遮挡h肉3d动漫在线观看 | 伊人在线视频 | 1000部做羞羞事禁片免费视频网站 | 优优色影院| 国产成人久久婷婷精品流白浆 | 久久热在线视频精品店 | 99久久99久久精品免费看子 | 无人区日本电影在线观看高清 | 男女全黄h全肉细节文 | 午夜一区二区三区 | chinese极品嫩模videos | 久久精品黄AA片一区二区三区 | 羞羞答答影院在线 | 一天不停的插BB十几次 | 99久久免费热在线精品 | 无码专区无码专区视频网网址 | 亚洲伊人久久精品 | 久久精品中文字幕有码日本 | 扒开她的黑森林让我添动态图 | 国产麻豆精品久久一二三 | 泷泽萝拉首部av | 甜性涩爱免费下载 | jizz日本美女 | 99在线国产视频 | 在线观看免费视频播放视频 | 国产精品亚洲视频在线观看 | 久久精品亚洲AV中文2区金莲 | 快乐激情站 |