大香蕉大香蕉在线播放-日韩av在线一区中文字幕-日韩熟女熟妇久久精品综合-精品免费视频一区二区三区

技術熱線: 4007-888-234
設計開發(fā)

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

單片機中C語言的程序與數據存儲

更新時間: 2019-03-22
閱讀量:3793

單片機代理商深圳英銳恩分享單片機中C語言的程序與數據存儲。

一、五大內存分區(qū):

內存分成5個區(qū),它們分別是堆、棧、自由存儲區(qū)、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。

1、棧區(qū)(stack):FIFO就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量、函數參數等。

2、堆區(qū)(heap):就是那些由new分配的內存塊,它們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,那么在程序結束后,操作系統(tǒng)會自動回收。

3、自由存儲區(qū):就是那些由malloc等分配的內存塊,它和堆是十分相似的,不過它是用free來結束自己的生命。

4、全局/靜態(tài)存儲區(qū):全局變量和靜態(tài)變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區(qū)分了,他們共同占用同一塊內存區(qū)。

5、常量存儲區(qū):這是一塊比較特殊的存儲區(qū),它們里面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)

code/data/stack

內存主要分為代碼段,數據段和堆棧。代碼段放程序代碼,屬于只讀內存。數據段存放全局變量,靜態(tài)變量,常量等,堆里存放自己malloc或new出來的變量,其他變量就存放在棧里,堆棧之間空間是有浮動的。數據段的內存會到程序執(zhí)行完才釋放。調用函數先找到函數的入口地址,然后計算給函數的形參和臨時變量在棧里分配空間,拷貝實參的副本傳給形參,然后進行壓棧操作,函數執(zhí)行完再進行彈棧操作。字符常量一般放在數據段,而且相同的字符常量只會存一份。

二、C語言程序的存儲區(qū)域

1、由C語言代碼(文本文件)形成可執(zhí)行程序(二進制文件),需要經過編譯-匯編-連接三個階段。編譯過程把C語言文本文件生成匯編程序,匯編過程把匯編程序形成二進制機器代碼,連接過程則將各個源文件生成的二進制機器代碼文件組合成一個文件。

2、C語言編寫的程序經過編譯-連接后,將形成一個統(tǒng)一文件,它由幾個部分組成。在程序運行時又會產生其他幾個部分,各個部分代表了不同的存儲區(qū)域:

1)代碼段(Code或Text)

代碼段由程序中執(zhí)行的機器代碼組成。在C語言中,程序語句執(zhí)行編譯后,形成機器代碼。在執(zhí)行程序的過程中,CPU的程序計數器指向代碼段的每一條機器代碼,并由處理器依次運行。

2)只讀數據段(RO data)

只讀數據段是程序使用的一些不會被更改的數據,使用這些數據的方式類似查表式的操作,由于這些變量不需要更改,因此只需要放置在只讀存儲器中即可。

3)已初始化讀寫數據段(RW data)

已初始化數據是在程序中聲明,并且具有初值的變量,這些變量需要占用存儲器的空間,在程序執(zhí)行時它們需要位于可讀寫的內存區(qū)域內,并且有初值,以供程序運行時讀寫。

4)未初始化數據段(BBS)

未初始化數據是在程序中聲明,但是沒有初始化的變量,這些變量在程序運行之前不需要占用存儲器的空間。

5)堆(heap)

堆內存只在程序運行時出現,一般由程序員分配和釋放。在具有操作系統(tǒng)的情況下,如果程序沒有釋放,操作系統(tǒng)可能在程序(例如一個進程)結束后會后內存。

6)棧(statck)

堆內存只在程序運行時出現,在函數內部使用的變量,函數的參數以及返回值將使用棧空間,棧空間由編譯器自動分配和釋放。

3、代碼段、只讀數據段、讀寫數據段、未初始化數據段屬于靜態(tài)區(qū)域,而堆和棧屬于動區(qū)域。代碼段、只讀數據段和讀寫數據段將在連接之后產生,未初始化數據段將在程序初始化的時候開辟,而對堆和棧將在程序餓運行中分配和釋放。

4、C語言程序分為映像和運行時兩種狀態(tài)。在編譯-連接后形成的映像中,將只包含代碼段(Text)、只讀數據段(R0 Data)和讀寫數據段(RW Data)。在程序運行之前,將動態(tài)生成未初始化數據段(BSS),在程序的運行時還將動態(tài)生成堆(Heap)區(qū)域和棧(Stack)區(qū)域。

注:

1、一般來說,在靜態(tài)的映像文件中,各個部分稱之為節(jié)(Section),而在運行時的各個部分稱之為段(Segment)。如果不詳細區(qū)分,統(tǒng)稱為段。

2、C語言在編譯連接后,將生成代碼段(TEXT),只讀數據段(RO Data)和讀寫數據段(RW Data)。在運行時,除了上述三個區(qū)域外,還包括未初始化數據段(BBS)區(qū)域和堆(heap)區(qū)域和棧(Stack)區(qū)域。

(文源網絡,侵刪)

精彩欧美一区二区三区| 青娱乐欧美性爱视频| 亚洲 欧美 日韩 主播| 黄色片视频1024| 久久亚洲精品无码AV宋| 日本韩国国产精品一区| 日韩美女在线视频一区不卡| 日本乱人伦中文在线播放| 久久久精品欧美一区二区三免费| 男人和女人干污污| 国产精品国产精黄 | 成人国产亚洲精品一区二| 操烂嫩逼内射视频| 黑丝美女被操到高潮| 激情久久久久久久久久久| 大鸡巴操屁眼无码| 60秒动态视频在线观看| 97超级免费视频在线观看| 澳门一区二区免费下线观看 | 粉嫩小穴被大鸡巴操视频在线观看| 青青河边草直播免费观看| 在线12萝自慰喷水| avtt天堂网先锋伦理| 深插巴西美女的逼| 久久久久久久久中文字幕| 操纯欲女生小穴视频| 国产午夜爽爽爽男女免费动漫AV| 天美传媒精品1区2区3区| 几把日逼嗯嗯视频| 国产乱子伦视频一区二区三区| 色欲精品一区二区三区AV| 视频一区二区三区日韩视频| 女生的鸡鸡色色软件 | 亚洲国产成久久成人综合一区| 哈啊慢点不要了视频| 在线观看免费视频a v| 中国女人日逼免费片| 99热这里有精品在线观看| 日本熟妇 bbw| 在线观看免费视频a v| 中文字幕av一区二区三区哈|