Saya telah menulis program C yang berisi kode yang mengalokasikan memori menggunakan malloc()
fungsi. Jika saya tidak membebaskan memori menggunakan free()
fungsi, apakah Ubuntu akan merilisnya secara otomatis?
Saya telah menulis program C yang berisi kode yang mengalokasikan memori menggunakan malloc()
fungsi. Jika saya tidak membebaskan memori menggunakan free()
fungsi, apakah Ubuntu akan merilisnya secara otomatis?
Jawaban:
Iya.
Kernel akan merilis semua sumber daya yang dialokasikan oleh suatu program setelah penghentian program.
Ini dilakukan setelah do_exit()
fungsi yang didefinisikan dalam kernel/exit.c
telah menghentikan pelaksanaannya; yang do_exit()
eksekusi fungsi itu sendiri mungkin dipicu oleh sejumlah acara, paling sering oleh eksplisit exit()
syscall dipanggil oleh program selama perhitungan biasa atau oleh implisit exit()
syscall disebut oleh program saat penghentian nya (seperti C compiler menempatkan sebuah exit()
syscall setelah main()
's kembali). Alasan lain termasuk penerimaan sinyal atau pengecualian yang tidak dapat ditangani / tidak dapat diabaikan.
The do_exit()
fungsi itu sendiri melakukan sejumlah tugas. Setelah penghentian eksekusi, sumber daya yang dialokasikan program dirilis oleh kernel dan dikembalikan ke sistem untuk penggunaan lebih lanjut.