Data Structures =============== heap top free_head free_tail block next_free user_data Functions ========= malloc(heap) if heap->top unset heap->top = 0 return 0 elif heap->free_head unset return ++heap->top else block = heap->free_head if heap->free_head == heap->free_tail unset heap->free_head unset heap->free_tail else heap->free_head = heap->free_head->next_free return block free(heap, ptr) if heap->free_tail unset heap->free_head = heap->free_tail = ptr else heap->free_tail->next_free = ptr heap->free_tail = ptr Return register: __mr