程式段.text, data (initialized), bss, stack, heap
程式分為下面的段:.text, data (initialized), bss, stack, heap。
data/bss/text:
text段在記憶體中被對映為只讀,但.data和.bss是可寫的。
bss是英文Block Started by Symbol的簡稱,通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,在程式載入時由核心清0。BSS段屬於靜態記憶體分配。它的初始值也是由使用者自己定義的連線定位檔案所確定,使用者應該將它定義在可讀寫的RAM區內,源程式中使用malloc分配的記憶體就是這一塊,它不是根據data大小確定,主要由程式中同時分配記憶體最大值所確定,不過如果超出了範圍,也就是分配失敗,可以等空間釋放之後再分配。
text段是程式程式碼段,在AT91庫中是表示程式段的大小,它是由編譯器在編譯連線時自動計算的,當你在連結定位檔案中將該符號放置在程式碼段後,那麼該符號表示的值就是程式碼段大小,編譯連線時,該符號所代表的值會自動代入到源程式中。
data包含靜態初始化的資料,所以有初值的全域性變數和static變數在data區。段的起始位置也是由連線定位檔案所確定,大小在編譯連線時自動分配,它和你的程式大小沒有關係,但和程式使用到的全域性變數,常量數量相關。
stack/heap:
棧(stack)儲存函式的區域性變數和引數。是一種“後進先出”(Last In First Out,LIFO)的資料結構,這意味著最後放到棧上的資料,將會是第一個從棧上移走的資料。對於哪些暫時存貯的資訊,和不需要長時間儲存的資訊來說,LIFO這種資料結構非常理想。在呼叫函式或過程後,系統通常會清除棧上儲存的區域性變數、函式呼叫資訊及其它的資訊。棧另外一個重要的特徵是,它的地址空間“向下減少”,即當棧上儲存的資料越多,棧的地址就越低。棧(stack)的頂部在可讀寫的RAM區的最後。
堆(heap)儲存函式內部動態分配記憶體,是另外一種用來儲存程式資訊的資料結構,更準確的說是儲存程式的動態變數。堆是“先進先出”(First In first Out,FIFO)資料結構。它只允許在堆的一端插入資料,在另一端移走資料。堆的地址空間“向上增加”,即當堆上儲存的資料越多,堆的地址就越高。
.stab 除錯資訊.
section size addr
.data 3042 8388864
.text 12918 0
.bss 1027 8391906
.noinit 0 8392933
.eeprom 0 8454144
.stab 4368 0
.stabstr 253 0
.debug_aranges 280 0
.debug_pubnames 2435 0
.debug_info 23419 0
.debug_abbrev 4577 0
.debug_line 12151 0
.debug_str 3422 0
Total 67892
完成顯示及讀SPI
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/163295/viewspace-1014892/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料段data、bss、rodata
- 淺談c語言程式碼段 資料段 bss段C語言
- Heap和Stack的區別
- The Stack and the Heap棧與堆__RustRust
- 堆(heap)和棧(stack)的區別
- 程式的記憶體分配:棧區(stack)堆區(heap)。。。(轉載)記憶體
- Objective-C 拾遺:從Heap and Stack到BlockObjectBloC
- Java中記憶體中的Heap、Stack與程式執行的關係Java記憶體
- (轉)Objective-C 拾遺:從Heap and Stack到BlockObjectBloC
- JVM執行原理及Stack和Heap的實現過程JVM
- SWPUCTF_2019_login(格式字串偏移bss段)字串
- Java:Java語言程式設計的基礎知識(如約定俗成命名規則,JVM、Heap堆、Stack棧、Data segment資料)之詳細攻略Java程式設計JVM
- #pragma data_seg() 共享資料// MyData段 // 程式 // DLL
- windows環境下的heap spray+stack pivot gadget 實現繞過depWindows
- warning: already initialized constant FileUtils::VERSIONZed
- Setting Tomcat Heap Size (JVM Heap) in EclipseTomcatJVMEclipse
- Mach-O Inside: BSS SectionMacIDE
- Stack Overflow 與全民程式設計時代程式設計
- Core Text 程式設計指南程式設計
- STACK!
- stack
- Wi-Fi BSS和ESS的區別
- 堆排序 Heap Sort排序
- Error StackError
- java stackJava
- Tech Stack
- Stack Overflow:最令人討厭的程式語言
- Stack Overflow 最流行的程式語言和標籤
- ImportError: cannot import name 'get_ora_doc' from partially initialized moduleImportErrorZed
- 小程式 rich-text JAVA 如何接入Java
- sublime text前端程式碼開發神器前端
- 程式碼編輯器:sublime text for MacMac
- sublime text 3 自制快速程式碼片段
- 淺談堆-Heap(一)
- Leetcode(easy heap)LeetCode
- 觸發 Java heap dumpJava
- Java堆記憶體Heap與非堆記憶體Non-HeapJava記憶體
- iOS 程式碼段收集iOS