Apakah Ubuntu secara otomatis melepaskan memori yang dialokasikan oleh program C saat program berakhir?
11
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?
Ini tidak ada hubungannya dengan Ubuntu, tanggung jawab kernelnya.
pengguna
@user: Versi tertentu dari Ubuntu harus dijalankan di atas salah satu versi dari kernel Linux. Jadi itu ada hubungannya dengan Ubuntu sehingga untuk mengetahui apakah kernel itu berjalan pada melepaskan memori secara otomatis atau tidak.
ashubuntu
Jawaban:
16
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.ctelah 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.
Jawaban:
Iya.
Kernel akan merilis semua sumber daya yang dialokasikan oleh suatu program setelah penghentian program.
Ini dilakukan setelah
do_exit()
fungsi yang didefinisikan dalamkernel/exit.c
telah menghentikan pelaksanaannya; yangdo_exit()
eksekusi fungsi itu sendiri mungkin dipicu oleh sejumlah acara, paling sering oleh eksplisitexit()
syscall dipanggil oleh program selama perhitungan biasa atau oleh implisitexit()
syscall disebut oleh program saat penghentian nya (seperti C compiler menempatkan sebuahexit()
syscall setelahmain()
'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.Sumber
sumber