C 基礎知識 變數儲存位置

2021-07-11 15:23:59 字數 844 閱讀 6530

1.棧區(stack):程式執行時由編譯器自動分配

存放:函式的引數值,區域性變數的值。

儲存連續,其操作方式類似於資料結構中的棧。

棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,所以空間有限,windows下大多1-2m。

2.堆區(heap): 

在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。

存放:程式設計師申請的記憶體空間。

儲存不連續,資料結構中的堆是兩回事,類似於鍊錶,受限於虛擬記憶體,32bit系統可達到4g。

堆區是向上增長的用於分配程式設計師申請的記憶體空間。

3.全域性區(靜態區)(static)—編譯器編譯時即分配記憶體。

全域性變數和靜態變數的儲存是放在一塊的,

初始化的全域性變數和靜態變數在一塊區域,

未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 

程式結束後由系統釋放。

附:靜態區域性變數只對自己定義的函式體可見。

靜態全域性變數具有檔案作用域,兩個不同的原始檔可以名字相同的靜態全域性變數,表示兩個變數。

而全域性變數定義的原始檔需要用extern 關鍵字再次宣告這個全域性變數。

4.唯讀區

常量區:常量字串就是放在這裡的。程式結束後由系統釋放。

程式**區:存放函式體的二進位制**。

5.棧中的儲存內容 

棧: 在函式呼叫時進棧順序

b.數的各個引數,在大多數的c編譯器中,引數是由右往左入棧的

c.然後是函式中的區域性變數。(注意靜態變數是不入棧的,在全域性區)。 

出棧順序,逆序。

6.堆的內容:堆的頭部用乙個位元組存放堆的大小

c語言基礎知識 變數

a 3 我們今天主要來談談變數,就是 a 1.變數是什麼 2.變數的三要素int a 讓我們乙個乙個來解釋 變數的型別 變數名變數的定義。3.一點思考 為什麼整形變數會存在溢位現象呢?溢位 int a 2147483647 int b a 1 最終 b 2147483648為什麼浮點型變數會有精度的...

基礎知識 變數型別

為何變數值 即記錄的資料 要區分型別呢?變數值使用來記錄事物狀態的,而事物的狀態 是各種各樣的,所以對應著就應該用不同型別的值 去記錄這些狀態 作用 記錄描述性質的狀態 定義 在 中包含一串字元 name egon 單行字串 多行字串 msg aaaa bbbb ccc 外層用單引號,內層就應該用雙...

C 基礎知識 變數與常量

1.定義變數的語法 資料型別 變數名 定義乙個年齡的變數,年齡是整數,所以變數定義如下 int age 系統會根據資料型別,在記憶體中分配不同大小的儲存空間 每個資料型別後面,可以定義多個變數,如 定義姓名 家庭位址 籍貫 民族 string name,address,origin,national...