首頁 > 後端開發 > C++ > C 和 C 中靜態變數和全域變數的初始化過程是什麼?

C 和 C 中靜態變數和全域變數的初始化過程是什麼?

DDD
發布: 2024-11-05 20:22:02
原創
1074 人瀏覽過

What is the Initialization Process for Static and Global Variables in C and C  ?

C 和 C 語言中靜態變數和全域變數何時初始化?

在 C 和 C 語言中,靜態變數和全域變數有不同的初始化過程。與 C 不同,靜態和全域物件在主函數之前進行構造,C 缺乏這樣的初始化。

C 中的初始化時序

在 C 程式碼中,全域變數如global_int1 和 global_int2 沒有明確初始化程序,由系統初始化為 0。但是,靜態變數 static_int1 和 static_int2 未初始化。它們的值在程式中明確設定之前保持不確定。

C 中的初始化值

具有明確初始化器的變數(例如值為5 的global_int1)被指派其值由編譯器作為程式碼翻譯的一部分。該值儲存在可執行檔的資料段中。

程式執行時,系統將執行檔載入到記憶體中,包括資料段。然後為全域變數分配記憶體並使用資料段中儲存的值進行初始化。

C 中的初始化階段

C 遵循靜態的三階段初始化過程具有命名空間範圍的物件:

  1. 零初始化: 所有靜態物件初始都設定為0。
  2. 靜態初始化: 具有靜態的物件初始化(例如,static_int1)被指派它們的值。
  3. 動態初始化:具有動態初始化的物件(例如,如果在 C 中未初始化,則為 static_int2 或 global_int2 )在運行時透過程式碼執行進行初始化。

C 中的記憶體管理

C 中的靜態初始化值儲存在執行檔的資料段中。與 C 類似,這些值在程式執行期間​​載入到記憶體中並分配給相應的變數。

沒有初始化器或動態初始化的變數在 bss 段中分配記憶體。系統在程式執行前將這些變數初始化為0。

以上是C 和 C 中靜態變數和全域變數的初始化過程是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板