首頁 >後端開發 >C++ >堆疊與堆疊:C 中全域聲明的資料結構在哪裡?

堆疊與堆疊:C 中全域聲明的資料結構在哪裡?

Barbara Streisand
Barbara Streisand原創
2024-12-09 22:43:09632瀏覽

Stack vs. Heap: Where Does a Globally Declared Data Structure in C   Live?

C 中的記憶體分配:全域資料結構的堆疊與堆疊

C 中全域宣告資料結構時,會出現以下問題:它消耗堆疊記憶體或堆疊記憶體。要完全理解這一點,必須了解進程使用的不同記憶體段。

通常,進程擁有五個主要記憶體區域:

  1. 程式碼(文字段) : 包含執行程式碼。
  2. 初始化資料(資料段): 儲存在編譯時以值初始化的全域和靜態變數。
  3. 未初始化資料(bss 段): 儲存編譯時未初始化的全域和靜態變量,已初始化在執行時間為零。
  4. 堆疊: 使用 new 等運算子取得動態分配的記憶體
  5. 堆疊:儲存局部變數、函數參數和回傳位址。

回到最初的問題,如果一個資料結構是全域宣告的(不在函數內),它將被分配在資料段(初始化資料)或bss 段(未初始化資料)中,取決於它是否是是否已初始化。這些段駐留在靜態記憶體中,通常由作業系統管理,程式無法存取。

因此,C 中全域宣告的資料結構不會消耗堆疊記憶體

以上是堆疊與堆疊:C 中全域聲明的資料結構在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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