Nếu tôi đã lập trình - mà không biết - bị rò rỉ bộ nhớ và ứng dụng chấm dứt, thì bộ nhớ bị rò rỉ có được giải phóng không?
Nếu tôi đã lập trình - mà không biết - bị rò rỉ bộ nhớ và ứng dụng chấm dứt, thì bộ nhớ bị rò rỉ có được giải phóng không?
Câu trả lời:
Đúng, "rò rỉ bộ nhớ" chỉ đơn giản là bộ nhớ mà một tiến trình không còn tham chiếu đến, và do đó không thể giải phóng được nữa. Hệ điều hành vẫn theo dõi tất cả bộ nhớ được cấp cho một quá trình và sẽ giải phóng bộ nhớ khi quá trình đó kết thúc.
Trong phần lớn các trường hợp, hệ điều hành sẽ giải phóng bộ nhớ - như trường hợp với các "hương vị" thông thường của Windows, Linux, Solaris, v.v. Tuy nhiên, điều quan trọng cần lưu ý là trong các môi trường chuyên biệt như các Hệ điều hành thời gian thực khác nhau, bộ nhớ có thể không được giải phóng khi chương trình bị kết thúc.
Hệ điều hành thực thi chương trình của bạn thường dọn dẹp bộ nhớ không được giải phóng một cách rõ ràng và xử lý không được đóng một cách rõ ràng, nhưng điều này không được đảm bảo bởi tiêu chuẩn C ++. Bạn có thể tìm thấy một số thiết bị nhúng không giải phóng bộ nhớ của bạn bị rò rỉ.
Điều đó đang được nói rằng Windows và tất cả các bản phân phối của Linux mà tôi từng thấy đều có tác dụng giải phóng bộ nhớ.
Mặc dù vậy, bạn có thể dễ dàng tạo ra một vòng rò rỉ bộ nhớ khổng lồ để tự mình kiểm tra. Xem mức sử dụng RAM của bạn tăng lên và sau đó đóng chương trình của bạn. Bạn sẽ thấy rằng việc sử dụng RAM sẽ giảm xuống.
Một cân nhắc khác khi sử dụng C ++ là nếu bạn không xóa bộ nhớ được cấp phát heap thì các hàm hủy của bạn cũng sẽ không được gọi. Đôi khi bạn cũng sẽ có các tác dụng phụ khác nếu không gọi được hàm hủy.
Thông thường, có. Một số hệ thống hỗ trợ những thứ như khối bộ nhớ dùng chung không được giải phóng tự động khi chương trình thoát. Hầu hết vẫn giữ số lượng tham chiếu và xóa nó khi tất cả các chương trình đã mở nó thoát ra, nhưng một số ít thì không (ví dụ: Windows 16-bit có một số loại mục sẽ vẫn được phân bổ ngay cả khi không có gì tham chiếu đến chúng - mặc dù nó thường bị hỏng vì những lý do khác trước khi tích lũy đủ số lượng này để gây ra sự cố ...)
Phụ thuộc vào bộ nhớ bạn bị rò rỉ. Hệ điều hành không thể lấy lại một số bộ nhớ. Tuy nhiên, hầu hết bộ nhớ trên hầu hết các hệ điều hành sẽ được tự động lấy lại khi quá trình thoát.