Giới thiệu
Khi làm việc với các thiết bị có bộ nhớ lớn như PC, Smartphone, trừ các ứng dụng đòi hỏi bộ nhớ lớn như đồ họa, game hoặc ứng dụng giải trí, thông thường sẽ không gặp vấn đề về bộ nhớ, nhưng khi làm việc với các thiết bị có bộ nhớ khiêm tốn, thông thường sẽ bị thiếu bộ nhớ và đôi khi đủ bộ nhớ nhưng bị phân mảnh dẫn đến không cấp phát được.
Ý tưởng bài viết này nhằm:
- Biết thêm 1 trong vô vàn phương pháp tối ưu và quản lý bộ nhớ.
- Hiểu biết thêm về cơ chế cấp phát động.
Đặt vấn đề
Trong ngôn ngữ lập trình C/C++, để cấp phát và thu hồi 1 vùng nhớ động cần sử dụng hàm malloc
và free
hoặc new
và delete
.
Ví dụ Cat *cat = (Cat*) malloc(sizeof(Cat));
Vấn đề nảy sinh
Giả sử màu vàng là vùng đã cấp phát, 1 ô vuông là 1 byte.

Như hình trên, vùng màu trắng là vùng chưa cấp phát, vùng màu vàng là vùng đã cấp phát. Nế có nhu cầu cấp phát thêm 5 bytes, theo nguyên tắc của cấp phát thì 5 bytes này phải liên tục nhau nên dù tổng của bộ nhớ đủ chứa (9 bytes) nhưng cấp phát vẫn thất bại.
Các khoảng trống (phân mảnh) là hệ quả của việc cấp phát cấp phát dữ liệu và thu hồi.
* Bài viết chưa hoàn thiện và đang cập nhật.