Initialize the queue: 1024 bytes -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1024 Allocate 12 bytes Resize ->m_queue[0] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| | -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1012 1024 Add a block at ->m_queue[1] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|AAAA| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1012 ^ 1024 |-mem_queue->m_queue[1] Allocate 4 bytes Resize ->m_queue[1] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| |AAAA| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1008 ^ 1024 |-mem_queue->m_queue[1] Add a block at ->m_queue[2] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|BB|AAAA| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1008 ^ ^ 1024 | |-mem_queue->m_queue[1] |-mem_queue->m_queue[2] Free 12 bytes -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|BB| | -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1008 ^ 1024 | |-mem_queue->m_queue[2] Shift ->m_queue[2] to the end and label as ->m_queue[1] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX| |BB| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1008 ^ 1024 | |-mem_queue->m_queue[2] Add the 12 bytes back to ->m_queue[0] -------------------------------------------------------------------- |XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|BB| -------------------------------------------------------------------- 0 mem_queue->m_queue[0] 1020 ^ 1024 | |-mem_queue->m_queue[2]