Jika saya memprogram - tanpa menyadarinya - kebocoran memori, dan aplikasi berhenti, apakah memori yang bocor tersebut dibebaskan?
c++
memory-leaks
Martijn Courteaux
sumber
sumber
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.
sumber
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.
sumber
Apakah Anda menggunakan OS desktop (Windows, Linux, dll.)? Jika demikian, ya, secara umum sistem akan membebaskan semua memori yang terkait dengan program saat program keluar.
sumber
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 ...)
sumber
Sejauh yang saya tahu, sistem operasi modern akan membebaskan memori ini setelah program dihentikan.
sumber
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.
sumber