虛擬地址空間,堆疊,堆,資料段,程式碼段
程式的虛擬地址空間,堆疊、堆、資料段、程式碼段
上圖是程式的虛擬地址空間示意圖。
堆疊段:
1. 為函式內部的區域性變數提供儲存空間。
2. 進行函式呼叫時,儲存“過程活動記錄”。
3. 用作暫時儲存區。如計算一個很長的算術表示式時,可以將部分計算結果壓入堆疊。
資料段(靜態儲存區):
包括BSS段的資料段,BSS段儲存未初始化的全域性變數、靜態變數。資料段儲存經過初始化的全域性和靜態變數。
程式碼段:
又稱為文字段。儲存可執行檔案的指令。
堆:
就像堆疊段能夠根據需要自動增長一樣,資料段也有一個物件,用於完成這項工作,這就是堆(heap)。堆區域用來動態分配的儲存,也就是用 malloc 函式活的的記憶體。calloc和realloc和malloc類似。前者返回指標的之前把分配好的記憶體內容都清空為零。後者改變一個指標所指向的記憶體塊的大小,可以擴大和縮小,他經常把記憶體拷貝到別的地方然後將新地址返回。
1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
2、堆區(heap):由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列。
3、全域性區(靜態區):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 程式結束後由系統釋放。
4、文字常量區:常量字串就是放在這裡的。 程式結束後由系統釋放。
5、程式程式碼區:存放函式體的二進位制程式碼。
相關文章
- JS 資料型別和堆疊JS資料型別
- JS 堆疊JS
- java堆疊Java
- 堆疊圖
- 平衡堆疊
- 淺談c語言程式碼段 資料段 bss段C語言
- 程式的虛擬地址空間——NULL指標分割槽Null指標
- SQL隱碼攻擊-堆疊注入SQL
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- C#中堆和堆疊的區別C#
- 圖的深度優先遍歷[非堆疊、堆疊實現]
- C語言中以下概念,以及這些概念之間的關係: 1.程式碼段 2.資料段 3.堆疊 4.全域性變數 5.區域性變數 6.函式C語言變數函式
- 記憶體堆疊記憶體
- 堆疊的工作原理
- C#堆疊(Stack)C#
- C#資料結構篇(二 堆疊) (轉)C#資料結構
- PHP列印呼叫函式入口地址(堆疊),方便調式PHP函式
- 程式虛擬空間分佈
- 堆疊的應用——用JavaScript描述資料結構JavaScript資料結構
- [golang]如何看懂呼叫堆疊Golang
- 華為裝置堆疊原理
- Thrift的網路堆疊
- C++堆疊詳解C++
- 泛型鏈式堆疊泛型
- 第六講 堆疊操作
- 益智補劑:Stamets堆疊
- java - OutOfMemoryError: Java heap space 堆空間不足JavaError
- 圖的深度優先遍歷(堆疊實現和非堆疊實現)
- android 解碼混淆過的堆疊資訊Android
- 線段樹(3)——區間操作疊加
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- oracle 段空間管理問題Oracle
- VRRP,堆疊,M-LAG三大虛擬化技術一文讀懂VR
- 【資料結構第二週】堆疊知識點整理資料結構
- 在C++中申請堆區空間與在C中申請堆區空間的異同點C++
- RapidJSON 程式碼剖析(一):混合任意型別的堆疊APIJSON型別
- junkman 遠端堆疊監控
- 什麼是網路堆疊?