Ubuntu có tự động giải phóng bộ nhớ được phân bổ bởi chương trình C khi chương trình kết thúc không?


11

Tôi đã viết một chương trình C chứa mã cấp phát bộ nhớ bằng cách sử dụng malloc()hàm. Nếu tôi không giải phóng bộ nhớ bằng free()chức năng này, Ubuntu sẽ tự động giải phóng nó chứ?


Nó không liên quan gì đến Ubuntu, trách nhiệm của kernel.
người dùng

@user: Một phiên bản Ubuntu cụ thể phải chạy trên một trong các phiên bản kernel Linux. Vì vậy, nó có một cái gì đó để làm với Ubuntu để biết liệu hạt nhân nó đang chạy có giải phóng bộ nhớ hay không.
ashubfox

Câu trả lời:


16

Đúng.

Hạt nhân sẽ giải phóng tất cả các tài nguyên được phân bổ bởi một chương trình khi chấm dứt chương trình.

Điều này được thực hiện sau khi do_exit()hàm được định nghĩa trong kernel/exit.cđã chấm dứt thực thi; các do_exit()chức năng thực hiện chính nó có thể được kích hoạt bởi một số sự kiện, phổ biến nhất bởi một rõ ràng exit()syscall gọi bằng chương trình trong tính toán thường xuyên của nó hoặc bằng một ngầm exit()syscall gọi bằng chương trình khi chấm dứt của nó (như trình biên dịch C đặt một exit()syscall sau main()'s trở về). Các lý do khác bao gồm việc nhận tín hiệu hoặc ngoại lệ không thể bỏ qua / không thể bỏ qua.

Các do_exit()chức năng chính nó thực hiện một số nhiệm vụ. Sau khi nó chấm dứt thực thi, các tài nguyên được phân bổ của chương trình được giải phóng bởi kernel và được trả về hệ thống để sử dụng tiếp.

Nguồn


7
Nhưng đó tất nhiên không phải là lý do để "quên" miễn phí () ...
Hagen von Eitzen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.