Ubuntu, program sona erdiğinde C programı tarafından ayrılan belleği otomatik olarak serbest bırakır mı?


11

Ben malloc()fonksiyonu kullanarak bellek ayırma kodu içeren bir C programı yazdım . Bu free()işlevi kullanarak belleği boşaltmazsam, Ubuntu otomatik olarak serbest bırakır mı?


Çekirdeğinin sorumluluğu olan Ubuntu ile hiçbir ilgisi yok.
kullanıcı

@user: Ubuntu'nun belirli bir sürümü Linux çekirdeği sürümlerinden birinin üstünde çalışmalıdır. Bu yüzden üzerinde çalıştığı çekirdeğin belleği otomatik olarak serbest bırakıp bırakmadığını bilmek için Ubuntu ile bir ilgisi var.
ashubuntu

Yanıtlar:


16

Evet.

Çekirdek, programın sona ermesi üzerine bir program tarafından ayrılan tüm kaynakları serbest bırakır.

Bu, do_exit()içinde tanımlanan işlev kernel/exit.cyürütülmesini sonlandırdıktan sonra yapılır ; do_exit()fonksiyonu yürütme kendisi etkinlikleri sayısına göre tetiklenebilir, en yaygın olarak, açık bir tarafından exit()düzenli hesaplama sırasında veya örtük bir programa göre adlandırılan sistem çağrısı exit()Cı derleyici yerleştirir olarak sona ermesi üzerine program tarafından adlandırılan sistem çağrısı ( exit()syscall sonra main()s' dönüş). Diğer nedenler, değiştirilemez / ihmal edilemez bir sinyalin veya istisnanın alınmasını içerir.

do_exit()Kendisi işlevi bir dizi görev yapar. Yürütülmesinin sona ermesinden sonra, programın ayrılan kaynakları çekirdek tarafından serbest bırakılır ve daha sonra kullanılmak üzere sisteme geri gönderilir.

Kaynak


7
Ama bu elbette özgürlüğü "unutmak" için bir mazeret değil ...
Hagen von Eitzen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.