Rumah >pembangunan bahagian belakang >C++ >Stack vs. Heap: Di Manakah Struktur Data yang Diisytiharkan Secara Global dalam C Live?

Stack vs. Heap: Di Manakah Struktur Data yang Diisytiharkan Secara Global dalam C Live?

Barbara Streisand
Barbara Streisandasal
2024-12-09 22:43:09629semak imbas

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

Peruntukan Memori dalam C : Tindanan vs. Timbunan untuk Struktur Data Global

Apabila mengisytiharkan struktur data secara global dalam C , persoalan timbul sama ada ia menggunakan ingatan tindanan atau ingatan timbunan. Untuk memahami ini sepenuhnya, adalah penting untuk memahami segmen memori yang berbeza yang digunakan oleh proses.

Lazimnya, proses mempunyai lima kawasan ingatan utama:

  1. Kod (segmen teks) : Mengandungi kod boleh laku.
  2. Data yang dimulakan (data segmen): Menyimpan pembolehubah global dan statik yang dimulakan dengan nilai pada masa penyusunan.
  3. Data tidak diinisialisasi (segmen bss): Memegang pembolehubah global dan statik yang tidak dimulakan pada masa penyusunan, dimulakan kepada sifar pada masa jalan.
  4. Timbunan: Memori yang diperuntukkan secara dinamik diperoleh menggunakan operator seperti baru dan malloc.
  5. Timbunan: Menyimpan pembolehubah setempat, parameter fungsi dan alamat pemulangan.

Berbalik kepada soalan asal, jika a struktur data diisytiharkan secara global (bukan dalam fungsi), ia akan diperuntukkan sama ada dalam segmen data (data yang dimulakan) atau segmen bss (data tidak dimulakan), bergantung pada sama ada ia dimulakan atau tidak. Segmen ini berada dalam memori statik, yang biasanya diuruskan oleh sistem pengendalian dan tidak boleh diakses oleh program.

Oleh itu, struktur data yang diisytiharkan secara global dalam C tidak menggunakan memori tindanan.

Atas ialah kandungan terperinci Stack vs. Heap: Di Manakah Struktur Data yang Diisytiharkan Secara Global dalam C Live?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn