C中静态存储区和动态存储区
c語言中需要內(nèi)存來存放數(shù)據(jù)。而內(nèi)存主要分為兩類:靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。
1、靜態(tài)存儲區(qū)
(1)分為數(shù)據(jù)區(qū)(只讀數(shù)據(jù)區(qū)(代碼區(qū)?在linux中又叫文本段.text)、讀寫數(shù)據(jù)區(qū).data)、未初始化區(qū)(BSS)。
(2)它們都是在程序編譯連接階段確定的。
2、動態(tài)存儲區(qū)
(1)分為堆和棧。
(2)程序執(zhí)行過程中動態(tài)分配,大小也隨之動態(tài)變化。
(3)從內(nèi)存管理的實現(xiàn)的角度看來,堆使用鏈表實現(xiàn),而棧使用的是線性存儲的方法。
補:
(1)關于棧
棧:棧是先進后出,實際的操作中,棧內(nèi)存可以有滿棧和空棧的情況。
滿棧的情況下,棧指針當前的位子是已經(jīng)使用的的棧區(qū)域;空棧的情況是,棧指針當前的位子是沒有使用的棧區(qū)域。
滿棧時:入棧,是先移動指針,再放入數(shù)據(jù);出棧則是先出數(shù)據(jù),再移動指針;
空棧時:入棧,是先放入數(shù)據(jù),再移動指針;出棧則是先移動指針,再出數(shù)據(jù);
(2)關于全局變量和局部變量的存儲
a、全局變量只會存在于數(shù)據(jù)區(qū)或者BSS區(qū)。如果初始化(為非0),則存儲在數(shù)據(jù)區(qū),否則(初始化為0或者不初始化)存儲在BSS區(qū)。
b、局部變量分為普通(auto)局部變量、靜態(tài)局部變量。
前者存儲在棧中,如果沒有初始化則為隨機值;后者存儲在數(shù)據(jù)區(qū)(初始化為非0)或BSS區(qū)(初始化為0或者不初始化)。
3、存儲類、生命周期,作用域、鏈接屬性
(1)存儲類表明變量在哪里存儲,生命周期表明什么時候為變量分配、收回內(nèi)存,作用域表明變量起作用的范圍(代碼塊,函數(shù)域,文件域);
(2)存儲類決定了生命周期,作用域決定了鏈接屬性。
(3)上面1,2中是存儲類的知識點;
(4)作用域表明變量起作用的范圍(代碼塊,函數(shù)域,文件域);
(5)鏈接屬性有外鏈接、內(nèi)鏈接、空鏈接(不參與鏈接)。
總結(jié)
以上是生活随笔為你收集整理的C中静态存储区和动态存储区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux文件IO(文件的读写)
- 下一篇: 网易云音乐 linux x32,网易云音