Jika saya memprogram - tanpa menyadarinya - kebocoran memori, dan aplikasi berhenti, apakah memori yang bocor tersebut dibebaskan?
Jika saya memprogram - tanpa menyadarinya - kebocoran memori, dan aplikasi berhenti, apakah memori yang bocor tersebut dibebaskan?
Jawaban:
Ya, "kebocoran memori" hanyalah memori yang tidak lagi memiliki referensi untuk proses, dan dengan demikian tidak dapat lagi gratis. OS masih melacak semua memori yang dialokasikan untuk suatu proses, dan akan membebaskannya saat proses itu berakhir.
Dalam sebagian besar kasus, OS akan membebaskan memori - seperti halnya dengan "rasa" normal Windows, Linux, Solaris, dll. Namun penting untuk dicatat bahwa dalam lingkungan khusus seperti berbagai Sistem Operasi Real-Time, memori mungkin tidak dibebaskan saat program dihentikan.
OS yang menjalankan program Anda biasanya melakukan pembersihan memori yang tidak dibebaskan secara eksplisit dan menangani yang tidak ditutup secara eksplisit, tetapi ini tidak dijamin oleh standar C ++. Anda mungkin menemukan beberapa perangkat tertanam yang tidak membebaskan kebocoran memori Anda.
Itu dikatakan Windows dan semua distro Linux yang pernah saya lihat membebaskan kebocoran memori.
Anda dapat dengan mudah membuat putaran besar kebocoran memori untuk mengujinya sendiri. Perhatikan penggunaan RAM Anda tumbuh dan kemudian tutup program Anda. Anda akan melihat bahwa penggunaan RAM kembali turun.
Pertimbangan lain saat menggunakan C ++ adalah jika Anda tidak menghapus memori yang dialokasikan heap, maka destruktor Anda juga tidak dipanggil. Terkadang Anda juga akan mengalami efek samping lain jika penghancur Anda tidak dipanggil.
Biasanya ya. Beberapa sistem mendukung hal-hal seperti blok memori bersama yang tidak secara otomatis dibebaskan ketika sebuah program keluar. Sebagian besar masih menyimpan jumlah referensi dan menghapusnya ketika semua program yang membukanya keluar, tetapi beberapa tidak (misalnya, Windows 16-bit memiliki beberapa jenis item yang akan tetap dialokasikan bahkan ketika tidak ada yang merujuk padanya - meskipun biasanya macet karena alasan lain sebelum cukup banyak akumulasi ini menyebabkan masalah ...)
Sejauh yang saya tahu, sistem operasi modern akan membebaskan memori ini setelah program dihentikan.
Tergantung dari memori yang bocor. Beberapa memori tidak dapat diambil kembali oleh OS. Namun, sebagian besar memori di sebagian besar OS akan diambil kembali secara otomatis saat proses keluar.