Slab allocator quản lý bộ nhớ theo các slab (mỗi slab = slab_size byte) chia thành các object bằng nhau (obj_size byte). Số object mỗi slab = slab_size // obj_size.
ALLOC: tìm slab đầu tiên (theo thứ tự tạo) còn chỗ trống, cấp 1 object trong đó. Nếu không slab nào còn chỗ → tạo slab mới rồi cấp.FREE: giải phóng object được cấp sớm nhất còn sống (FIFO theo thứ tự ALLOC), giảm số object đang dùng của slab tương ứng. Slab rỗng vẫn được giữ lại (không hủy).Sau q thao tác, in:
tổng_slab số_object_đang_dùng số_ô_trống (ô trống = tổng sức chứa − đang dùng).slab_size=64, obj_size=16 → 4 object/slab. Thao tác ALLOC ALLOC → 1 slab, 2 object dùng, 2 ô trống. In 4 rồi 1 2 2.
Dòng 1: slab_size.
Dòng 2: obj_size.
Dòng 3: q.
Tiếp theo q token thao tác: ALLOC hoặc FREE.
1 ≤ obj_size ≤ slab_size ≤ 10^6; obj_size chia hết được; 1 ≤ q ≤ 10^4.
Dòng 1: số object mỗi slab.
Dòng 2: tổng_slab object_đang_dùng số_ô_trống.
Ví dụ:
Đầu vào:
64
16
2
ALLOC ALLOC
Đầu ra:
4
1 2 2
Giải thích:
Đang tải editor...