Dalam C , tiga zon memori yang berbeza wujud: tindanan, statik dan timbunan. Memahami perbezaannya adalah penting untuk pengurusan memori yang cekap.
Memori statik (atau memori global) menyimpan data yang kekal sepanjang pelaksanaan program. Tanpa mengira panggilan fungsi atau pelaksanaan benang, pembolehubah statik merujuk kepada lokasi memori yang sama. Ini sesuai untuk data yang sentiasa diperlukan dan tidak pernah diagihkan.
Memori tindanan ialah struktur LIFO (terakhir masuk dahulu) yang diperuntukkan dan diagihkan secara automatik untuk setiap panggilan fungsi. Pembolehubah yang disimpan dalam tindanan dipanggil pembolehubah tempatan dan hanya wujud dalam skop fungsi di mana ia diisytiharkan.
Memori Timbunan ialah zon memori dinamik yang diperuntukkan pada masa jalan menggunakan fungsi seperti baru atau malloc. Tidak seperti ingatan tindanan, pembolehubah timbunan boleh mempunyai jangka hayat yang berubah-ubah dan boleh diakses di luar skop fungsi penentunya. Walau bagaimanapun, adalah menjadi tanggungjawab pengaturcara untuk mengagihkan memori timbunan secara eksplisit menggunakan delete atau free untuk mengelakkan kebocoran memori.
Peruntukan dinamik memberikan kefleksibelan dengan membenarkan pengaturcara memperuntukkan memori hanya apabila diperlukan . Ia juga membolehkan untuk memperuntukkan memori saiz berubah-ubah. Walau bagaimanapun, ia memperkenalkan potensi kebocoran memori jika tidak diurus dengan betul.
Pengumpulan sampah ialah sistem yang membebaskan memori secara automatik apabila ia tidak lagi dirujuk oleh mana-mana pembolehubah . Walau bagaimanapun, ini boleh memperkenalkan penalti prestasi, terutamanya dalam aplikasi yang memerlukan prestasi boleh diramal dan masa nyata.
Dalam pengisytiharan int * * asafe = new int;, asafe ialah penunjuk kepada penunjuk. Ini bermakna ia menyimpan alamat pembolehubah yang sendiri adalah penunjuk. Dalam kes ini, ia menunjuk kepada alamat pembolehubah integer yang diperuntukkan secara dinamik.
Sebaliknya, asafe = new int; hanya memperuntukkan pembolehubah integer secara dinamik dan memberikan alamatnya kepada asafe. Walau bagaimanapun, dalam kes ini, asafe menunjuk terus ke pembolehubah integer, bukan ke penunjuk.
Atas ialah kandungan terperinci Bagaimanakah Memori Tindanan, Statik dan Timbunan Berbeza dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!