Upload
adil054
View
214
Download
0
Embed Size (px)
Citation preview
8/3/2019 Lab 09 - Doubly Linked List
1/1
Punjab University College Of Information Technology Page 1 of1
Data Structures and AlgorithmsSpecial ClassLAB-09Dated: January 04, 2012
Objective: Understanding of doubly linked list.
Free Space Management with Doubly Linked Lists
Have you ever wondered how the new operator, which is used to create an object in C, C++ and Java which supportdynamic allocation of memory. One of the responsibilities ofnew is to allocate memory space for the newly-created
object. Java uses a memory manager to keep track of the memory space (the free space pool) available for creating
new objects. The memory manager needs to have mechanisms for allocating space from the free space pool and also
for returning space to the pool when an object is no longer being used. In today's lab, we will look at one way of
implementing the free space pool, by using a doubly linked list.
Your task is to implement a memory manager that is responsible for allocating and de-allocating the blocks of
memory.
The memory manager is responsible for handling two types of request:
1. MemoryBlock allocate(int size); // allocate a memory block of the given size2. void free(MemoryBlock block); // free a given memory block; that is, return it to the free list
Every memory block has the following structure.
public class MemoryBlock
{
private int address;
private int length;
MemoryBlock *prev;
MemoryBlock *next;
}
The basic strategy in the allocate method is to scan the free block list to find the first free block which is large enoughto satisfy the request. (This is called the "first fit" strategy). If the length of the free block is exactly the same as the
requested size, the block is simply removed from the free list and returned to the caller. If the first-fit block is larger
than the requested size, it is split into two parts. One part, the same size as the requested size, is returned to the caller.
The remainder of that block (with its size appropriately reduced) is left on the free list. If the free list does not contain
any block of sufficient size to satisfy the request, allocate should return null.
The list should be ordered by address. The free method starts by scanning the free list to find the place where the block
being freed belongs. The block should be returned to the free list, combining it with adjacent free blocks if possible.
(Two blocks b1 and b2 are adjacent if b1.address + b1.length == b2.address.) The rationale for this is that we want to
keep the free blocks as large as possible to handle future allocate requests; otherwise, fragmentation occurs. That is,
the free space is split into smaller and smaller blocks until they are too small to be of any use.
In programming the free method, there are four possible cases:
1. The block can be combined with the preceding block. In that case, we can simply add the length of the freeblock to the preceding block.
2. The block can be combined with the succeeding block. Add it to the succeeding block by adjusting both thesize and the address of the succeeding block.
3. The block can be combined with both the preceding block and the succeeding block. Combine all three byadding the lengths of the block and the succeeding block to the length of the preceding block, then deleting
the succeeding block.
4. The block cannot be combined with either block. Add it to the free list between the predecessor andsuccessor.