Search…

Tối Ưu Hóa - Quản Lý Bộ Nhớ Nhỏ và Phân Mảnh

26/09/20202 min read
Hướng dẫn tạo hệ thống tự cấp phát và thu hồi bộ nhớ dành cho bộ nhớ nhỏ và phân mảnh.

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 mallocfree hoặc newdelete.

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.

Cấp phát thu hồi dẫn đến bộ nhớ không được liên tục

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.

Bài chung series

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024