首頁 >後端開發 >C++ >C 和 C 可執行檔中靜態變數儲存在哪裡?

C 和 C 可執行檔中靜態變數儲存在哪裡?

Barbara Streisand
Barbara Streisand原創
2024-12-30 12:07:12211瀏覽

Where Are Static Variables Stored in C and C   Executables?

深入研究C 和C 中靜態變數的儲存

靜態變數在C 和C 程式設計中發揮著至關重要的作用,使資料能夠在整個生命週期中持續存在。程式.但是這些變數到底儲存在可執行檔中的哪裡以確保不會發生名稱衝突?

考慮以下程式碼片段:

// foo.c
static int foo = 1;
void fooTest() {
  static int bar = 2;
  foo++;
  bar++;
}

// bar.c
static int foo = 10;
void barTest() {
  static int bar = 20;
  foo++;
  bar++;
}

當使用 main 函數編譯和連結這些檔案時,重複呼叫 fooTest() 和 barTest(),printf 語句獨立遞增。這表明 foo 和 bar 變數對於它們各自的翻譯單元來說是本地的。

靜態變數的儲存分配

執行檔中靜態變數的分配取決於它們的初始化。

  • 零初始化:初始化為零的靜態資料放置在.BSS(由符號開始的區塊)段。該段在程式執行期間​​用零填充。
  • 非零初始化:使用非零值初始化的靜態資料放置在.DATA段中。該段包含初始化數據,在程式啟動時載入到記憶體中。

工具鏈依賴

靜態變數的特定儲存位置可能會根據所使用的工具鏈而有所不同。對於此討論,我們假設我們使用的是 GNU 編譯器集合 (GCC)。

結論

C 和 C 中的靜態變數儲存在可執行檔的 .BSS 或 .DATA 段中文件,取決於它們的初始化。這確保每個靜態變數都有唯一的記憶體位置並防止名稱衝突。

以上是C 和 C 可執行檔中靜態變數儲存在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn