Em chào mọi người,
Hôm trước em có nghỉ trúng bài về Heap trên lớp nên giờ tự coi lại nhưng không biết cách hiểu của em thế này có đúng không?
Như em hiểu thì
- data bytes allocated: sẽ luôn là kiểu 8 * n, ví dụ malloc(32) thì nó sẽ là 8*4 = 32
- block size: Giả sử của malloc(32) sẽ bằng 40. Vì sao? Em nghĩ tại vì nó sẽ có một byte cho header và một byte cho footer (?)
- Block header in hex: Đây chính là phần em còn cấn, em không hiểu tại sao 40 chuyển sang hex phải cộng thêm 1.
Em có thử áp dụng vào một bài tập như hình ảnh bên dưới
(1) Address of the header of the first allocated block: 0x1770
–> Vì sao: Luôn luôn là byte đầu tiên sẽ là header
(2) Length: 16
–> Vì sao: Vì từ 0x00000010 -> 0x00000010 gồm có 4 byte.
(3) User-data can be stored in this block: 8
–> Vì sao: Vì 1 byte dành cho header và 1 byte cho footer
(4) Address returned by malloc( ) when this header was set: 0x1774
–> Vì sao: Em vẫn chưa tìm được nguyên nhân tại sao
(5) Address of the header of the first free block: 0x1798
–> Vì sao: Như bạn em giảng lại thì free block sẽ có value số cuối cùng là even, vì thế nên em chọn 0x1798 mang giá trị 0x00000010
(6) Length (including header and footers): 16
(7) Data could potentially be stored in this block: 8
(8) If this heap uses a simple explicit free list, what is the address of the next free block: Em chọn 0x17d8 vì ở đó giá trị mang số cuối là even.
Theo như cách hiểu của em và áp dụng như thế thì có đúng không, và nếu sai anh chị có thể chỉ dẫn em với được không ạ?
Em cảm ơn.