程式記憶體分配:
1.棧區(stack):由編譯器自動分配釋放,存放為執行函式而分配的區域性變數,函式引數,返回引數,返回位址。其操作方式類似於資料結構中的棧。
2.堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。分配方式類似於鍊錶。
3.全域性資料區:存放全域性變數,靜態資料,常量。程式結束後由系統釋放。
1).已初始化全域性資料區 2).未初始化全域性資料區
4.文字常量區:常量字串就是放在這裡的。程式結束後由系統釋放。
5.程式**區:存放函式體(類成員函式和全域性函式)的二進位制**。
總結:記憶體中的位址由低到高依次是:**區—>字元常量區—>已初始化全域性資料區—>未初始化全域性資料區—>堆區—>棧區,堆疊相對而生,堆中的位址逐漸增大,棧中的位址逐漸減小。(棧:先進後出,後進先出)
Linux 程式的記憶體分配
可以通過命令objdump t bgw grep bss wc l檢視bss個數,objdump t bgw grep data wc l檢視data個數 其中,bss段 bss segment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域 data段用於儲存初始化的全域性變數 rod...
linux平台下程式跟蹤strace筆記
c 統計每一系統呼叫的所執行的時間,次數和出錯的次數等.d 輸出strace關於標準錯誤的除錯資訊.f 跟蹤由fork呼叫所產生的子程序.ff 如果提供 o filename,則所有程序的跟蹤結果輸出到相應的filename.pid中,pid是各程序的程序號.f 嘗試跟蹤vfork呼叫.在 f時,v...
SylixOS ARM平台下記憶體對齊訪問
現代計算機中記憶體空間都是按照byte劃分的,從理論上講對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。各個硬體平台對儲存空間的處理上有很大的不同。一些平台對...