- size: 此 Chunk 的 size - A (NON_MAIN_ARENA bit): 是否由其他的 arena 管理, 而非 main_arena - M (IS_MMAPPED bit): 是否由 mmap 創出來的 - P (PREV_INUSE bit): 鄰近的上一個 Chunk 是否正在使用 27 Ref: https://elixir.bootlin.com/glibc/glibc-2.31/source/malloc/malloc.c#L1076 Chunk Data prev_size / data size P M A size M A 1 data Chunk size 8 Bytes 8 Bytes
Chunk 通過 P 為 0 得知上一塊 Chunk 是 Free Chunk - 下一塊 Chunk 通過 prev_size 得知上一塊 Chunk 大小 41 Chunk Data (沒有實際作用) prev_size / data size P M A size M A 0 prev_size Chunk size 8 Bytes 8 Bytes fd bk
紀錄的 prev_size 是否一樣 - fd = p->fd - bk = p->bk - 檢查 fd->bk 為 p, 且 bk->fd 為 p - fd->bk = bk - bk->fd = fd 152 fd bk fd bk fd bk p fd bk fd bk fd bk fd bk p fd bk