在C 和C 中,靜態變數分配在執行檔的特定段中,以避免不同翻譯單元之間的命名衝突。當編譯多個原始檔時,例如提供的程式碼中的 foo.c 和 bar.c 文件,每個翻譯單元都會建立自己的靜態變數副本。
靜態變數的儲存位置取決於它們是否被初始化為零或不初始化。零初始化的靜態資料放置在 .BSS 段中,而非零初始化的靜態資料放置在 .DATA 段中。
在給定的範例中, foo 和 bar 都初始化為非零值。因此,它們將被分配在.DATA段中。編譯器在 .DATA 段中為這些變數保留空間,它們的值儲存在那裡。
連結執行檔時,.DATA 和 .BSS 段的內容會複製到對應的段。 ELF 檔案。 .DATA 段通常合併到 .text(代碼)段中,而 .BSS 段在運行時分配在程式記憶體的 BSS 區域中。
在 GCC 工具鏈中,靜態檔案的位置可以使用 -Xlinker -d' 選項檢查變量,該選項顯示 ELF 部分及其內容。透過檢查 .data 和 .bss` 部分,您可以驗證靜態變數的分配並確保它們不會相互衝突。
以上是C 和 C 中靜態變數分配在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!