close up photo of programming of codes

codecungnhau.com

Một trang web về kỹ thuật lập trình

Memory Leak là gì?

Trong bài viết này, chúng ta sẽ thảo luận về Memory Leak (rò rỉ bộ nhớ) là gì và tại sao nó có hại cho các ứng dụng.

Memory Leak

Memory leak hay rò rỉ bộ nhớ trong là một loại Bug (lỗi) giết chết ứng dụng của bạn từ từ bằng cách đầu tiên làm cho ứng dụng của bạn chạy chậm và cuối cùng làm crash ứng dụng.

Rò rỉ bộ nhớ xảy ra như thế nào?

Nó xảy ra trong ứng dụng khi người lập trình cấp phát bộ nhớ từ heap để sử dụng tạm thời và sau đó quên giải phóng bộ nhớ này sau khi sử dụng. Hãy xem đoạ mã sau,

void dummy()
{
    int * ptr = new int(5);
}
int main()
{
    dummy();
    return 0;
}

Ở đây, bên trong hàm dummy(), chúng ta đã cấp phát 4 byte trên heap nhưng quên xóa nó trước khi quay trở lại từ hàm dummy(). Ngoài ra, hàm này không hiển thị con trỏ đến bộ nhớ được cấp phát đó, vì vậy không ai bên ngoài hàm có quyền truy cập vào bộ nhớ được cấp phát đó. Do đó việc gọi hàm dummy() sẽ dẫn đến rò rỉ bộ nhớ.

Tại sao Rò rỉ bộ nhớ có hại?

Xem nào, chúng ta đã phí 4 byte, nhưng điều đó thì có vấn đề gì, chỉ là 4 byte thôi mà!!!

Nhưng mà, nếu hàm dummy() được gọi 100.000 lần thì sao? Hãy xem đoạn mã bên dưới,

for(int i = 0; i < 100000; i++)
        dummy();

Bây giờ thì 400.000 byte bộ nhớ đã bị rò rỉ do rò rỉ bộ nhớ đó.

Vì thế, rò rỉ bộ nhớ là lỗi rất nghiêm trọng vì nó có thể khiến ứng dụng của bạn thiếu bộ nhớ, tức là làm cho nó phản hồi rất chậm và cuối cùng bị treo ứng dụng.


Đã đăng vào

trong

bởi

Thẻ:

Bình luận

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *