1. 程式人生 > >靜態存儲區與全局變量

靜態存儲區與全局變量

代碼區 想要 生命周期 周期 知識 數組 結束 資源 區域

接下來說存儲類說明符的第二個知識點——靜態變量,它包括三種:全局變量/外部變量,靜態全局變量,靜態局部變量

非常重要!工作中必用。接近於底層的一個理解。

特點:

靜態變量存儲在靜態區/靜態全局區/靜態存儲區,因為內存區域分5個區:堆區,棧區,字符常量區,靜態區,代碼區。

這個內存區域有什麽特點?我們知道棧區的特點是 :變量的申請與釋放都是由操作系統幫我們管理的,而且變量的生命周期在它的作用域結束的時候,就放掉了。

靜態存儲區的特點:

1 靜態存儲區的變量/我們申請的空間 會自動初始化為0。不管是int a,你定義好了這個a之後,也不用去初始化,a裏面的值就是0.你定義一個指針 int * p,p裏面就是NULL. 你定義一個結構體,有多個成員,每個成員都是0.定義一個數組,數組的所有成員都被初始化為0.

2.生命周期與程序共存亡。

像棧區的局部變量,它的作用域就是這個變量所在的{}範圍內,從它定義的這一行開始直到{}結束,這麽一個區域。

而靜態變量是與程序共存亡的,從它創建開始到軟件關閉,這塊空間才會釋放。

3.靜態存儲區的靜態變量在程序運行的時候,在加載資源階段分配空間

解釋一下"加載資源階段分配空間":一個程序執行入口是主函數,當軟件一打開的時候,不會直接執行主函數的,是要加載一些資源,也就是軟件要運行所必要的資源,加載到內存。

資源加載完了,軟件運行的環境就相當於搭建好了,資源加載完了,開始執行主函數。

即使說靜態變量定義在主函數裏面了,這個變量依然是在程序加載的階段申請空間

全局變量 :

位置:寫在全局的位置。?!

技術分享圖片

技術分享圖片

只要不在任何函數內,就叫 全局變量。

全局變量會自動初始化為0.

技術分享圖片

當然也可以手動初始化成 想要的值。

技術分享圖片

當全局變量與局部變量重名,在局部位置,局部變量有效

靜態存儲區與全局變量