虛擬地址空間,堆疊,堆,資料段,程式碼段
程式的虛擬地址空間,堆疊、堆、資料段、程式碼段
上圖是程式的虛擬地址空間示意圖。
堆疊段:
1. 為函式內部的區域性變數提供儲存空間。
2. 進行函式呼叫時,儲存“過程活動記錄”。
3. 用作暫時儲存區。如計算一個很長的算術表示式時,可以將部分計算結果壓入堆疊。
資料段(靜態儲存區):
包括BSS段的資料段,BSS段儲存未初始化的全域性變數、靜態變數。資料段儲存經過初始化的全域性和靜態變數。
程式碼段:
又稱為文字段。儲存可執行檔案的指令。
堆:
就像堆疊段能夠根據需要自動增長一樣,資料段也有一個物件,用於完成這項工作,這就是堆(heap)。堆區域用來動態分配的儲存,也就是用 malloc 函式活的的記憶體。calloc和realloc和malloc類似。前者返回指標的之前把分配好的記憶體內容都清空為零。後者改變一個指標所指向的記憶體塊的大小,可以擴大和縮小,他經常把記憶體拷貝到別的地方然後將新地址返回。
1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
2、堆區(heap):由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列。
3、全域性區(靜態區):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 程式結束後由系統釋放。
4、文字常量區:常量字串就是放在這裡的。 程式結束後由系統釋放。
5、程式程式碼區:存放函式體的二進位制程式碼。
相關文章
- JS 資料型別和堆疊JS資料型別
- 資料結構的概念、堆疊資料結構
- JS 堆疊JS
- 平衡堆疊
- 堆疊圖
- 淺談c語言程式碼段 資料段 bss段C語言
- android 解碼混淆過的堆疊資訊Android
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- C語言中以下概念,以及這些概念之間的關係: 1.程式碼段 2.資料段 3.堆疊 4.全域性變數 5.區域性變數 6.函式C語言變數函式
- SQL隱碼攻擊-堆疊注入SQL
- 程式虛擬空間分佈
- C#堆疊(Stack)C#
- 堆疊的應用——用JavaScript描述資料結構JavaScript資料結構
- VRRP,堆疊,M-LAG三大虛擬化技術一文讀懂VR
- [golang]如何看懂呼叫堆疊Golang
- 益智補劑:Stamets堆疊
- Thrift的網路堆疊
- 在C++中申請堆區空間與在C中申請堆區空間的異同點C++
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- 線段樹(3)——區間操作疊加
- 檢視ELF中資料段哪些變數佔用空間變數
- Homestead 虛擬機器修改網段虛擬機
- 虛擬主機資料庫與空間關係資料庫
- bzoj2253 紙箱堆疊
- 什麼是網路堆疊?
- junkman 遠端堆疊監控
- iOS crash 日誌堆疊解析iOS
- (js佇列,堆疊) (FIFO,LIFO)JS佇列
- StackOverflowError堆疊溢位錯誤Error
- 華為裝置堆疊原理
- 新增時間段,但是不能與原來陣列中的時間段有重疊陣列
- Java多執行緒-程式執行堆疊分析Java執行緒
- 最新堆疊查詢注入攻擊和注入程式碼分析技術
- 將資料、程式碼、棧放入不同的段
- 資料結構-堆資料結構
- 資料結構 - 堆資料結構
- [資料結構]堆資料結構
- 資料結構——堆資料結構
- yandexbot ip 地址段