大香蕉大香蕉在线播放-日韩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ū)域。

(文源網絡,侵刪)

老司机免费福利午夜入口| 操我骚逼抽插视频| 久久久精品欧美一区二区三免费| 91精品国产综合久久久蜜| 被春药女高潮抽搐喷水视频| 性一交一乱一乱一区二区| 中文字幕欧美中日韩精品| 性一交一乱一乱一区二区| 国内揄拍国内精品| 一个色综合色综合色综合| 骚逼被操视频拳交| 男人草女人的视频免费看| 午夜福利国产三级片| 99久久九九爱精品国产| 午夜色大片在线免费观看| 91久久高清国语自产拍| 俩男人插下面的视频| 又色又爽又黄的吃奶Av| 久久久国产系列丝袜熟女| 久久噜噜噜久久熟女精品| 精品麻豆亚洲欧美| 亚洲天堂av一区二区在线观看| 欧美一级免费观看| 男人的天堂久久久久久久| 日韩素人精品亚洲热一区| 欧美大鸡巴插入骚b| 国产精品三二一免费| 伊人久久久久久久久香港| 国产日韩精品v一区二区| 老熟妇高潮一区二区高清视频| 影音先锋亚洲中文综合网| 国产亂倫近親相姦| 骚逼被狂插视频教程| 日本六十五十熟女一级黄色| 综合欧美日韩一区二区三区 | 精品一区二区视频在线观看| 大香蕉大香蕉大香蕉大香| 亚洲天堂av一区二区在线观看| 啊啊啊好爽高潮啦| 精品无码国产一区二区三区A | 亚洲视频免费观看|