Rò rỉ bộ nhớ

Trong khoa học máy tính, rỏ rỉ bộ nhớ (tiếng Anh: memory leak) là một dạng rỏ rỉ tài nguyên xảy ra khi một chương trình máy tính quản lý không chính xác việc cấp phát bộ nhớ theo cách bộ nhớ không cần dùng nữa lại không được giải phóng. Trong lập trình hướng đối tượng, một rò rỉ bộ nhớ có thể xảy ra khi một đối tượng chứa trong bộ nhớ không thể được truy cập bởi mã đang chạy. Rò rỉ bộ nhớ có dấu hiệu tương tự như các vấn đề khác và thường chỉ có thể được chẩn đoán bởi lập trình viên có quyền truy cập vào mã nguồn của chương trình.

Một rỏ rỉ không gian (space leak) xảy ra khi chương trình máy tính dùng nhiều bộ nhớ hơn mức cần thiết. Ngược lại với rỏ rỉ bộ nhớ, khi bộ nhớ rò rỉ không bao giờ được giải phóng, bộ nhớ được dùng bởi rò rỉ không gian sẽ được giải phóng nhưng chậm hơn dự kiến.

Bởi vì chúng làm tiêu tốn bộ nhớ hệ thống có sẵn khi ứng dụng chạy, rỏ rỉ bộ nhớ thường là nguyên nhân hay nhân tố đóng góp vào lão hóa phần mềm (software aging).

Hậu quả 

Rỏ rỉ bộ nhớ làm giảm hiệu suất của máy tính khi giảm số lượng bộ nhớ có sẵn. Cuối cùng, trong trường hợp xấu nhất, quá nhiều bộ nhớ có sẵn bị cấp phát và khiến tất cả các hay một phần của hệ thống hay thiết bị ngừng hoạt động chính xác, ứng bị bị lỗi, hay hệ thống chậm lại rất nhiều do sự trì trệ.

Rò rỉ bộ nhớ có thể không nghiêm trọng hay thậm chí có thể được phát hiện bởi các phương tiện thông thường. Trong các hệ điều hành hiện đại, bộ nhớ thông thường được sử dụng bởi một ứng dụng sẽ được giải phóng khi tắt ứng dụng đó. Điều đó nghĩa là một rỏ rỉ bộ nhớ trong chương trình chỉ chạy trong một thời gian ngắn, có thể không được chú ý và hiếm khi nghiêm trọng.

Một ví dụ của rò rỉ bộ nhớ 
Ví dụ sau, được viết bằng mã giả, nhằm mục đích cho thấy rỏ rỉ bộ nhớ có thể xảy ra như thế nào, và các hiệu ứng của nó, mà không yêu cầu kiến thức lập trình. Trong trường hợp này, chương trình là một phần của phần mềm đơn giản được thiết kế để điều khiển một thang máy. Phần này của chương trình được chạy bất cứ khi nào có ai đó trong thang máy và nhấn nút để chọn lầu.

 Khi nút được nhấn:
   Nhận vài bộ nhớ, dùng để nhớ số lầu
   Đặt số lầu vào trong bộ nhớ đó
   Liệu chúng ta đã ở lầu đó rồi?
     Nếu vậy, chúng ta không làm gì: kết thúc
     Ngược lại:
       Chờ đến khi thang máy rảnh rỗi
       Di chuyển đến lầu được yêu cầu
       Giải phóng bộ nhớ mà chúng ta dùng để nhớ số lầu

Rò rỉ bộ nhớ sẽ xảy ra nếu số lầu được yêu cầu chính là số lầu mà thang máy đang ở; điều kiện để giải phóng bộ nhớ sẽ bị bỏ qua. Mỗi khi trường hợp đó xảy ra, càng nhiều bộ nhớ bị rò rỉ.

Xem thêm 
 Lỗi tràn bộ nhớ đệm
 Quản lý bộ nhớ
 Memory debugger
 Plumbr
 nmon

Tham khảo

Liên kết ngoài 
 Visual Leak Detector  for Visual Studio, open source
 Detecting a Memory Leak (Using MFC Debugging Support)
Article "Memory Leak Detection in Embedded Systems " by Cal Erickson

Lỗi phần mềm
Bất thường trong phần mềm