Skip to content

Instantly share code, notes, and snippets.

@mkosler
Created February 13, 2013 10:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkosler/4943654 to your computer and use it in GitHub Desktop.
Save mkosler/4943654 to your computer and use it in GitHub Desktop.
Annotated guide to WRONG!
if(block_found.isempty == 1)
{
if(block_found.block_size == _length)
{
//int p = 0;
//for(p = log2(_length) - log2(*BASIC_BLOCK_SIZE); p < log2(*TOTAL_BLOCK_LENGTH) - log2(*BASIC_BLOCK_SIZE) + 1; p++)
//{
// printf("free_list_left[%d] isempty = %d \n", p, free_list_left[p].isempty );
// printf("free_list_right[%d] isempty = %d \n\n", p, free_list_right[p].isempty );
// }
// LOOK HERE!!!!!!!!!!!!!!!!!!!!
// You need to add this to make it "correct", but doing so breaks you code
// if (leftright == 0)
// free_list_left[i].isempty = 0;
// else
// free_list_right[i].isempty = 0;
// LOOK HERE!!!!!!!!!!!!!!!!!!!!
return block_found.address;
}
else
{
free_list_left[i-1].address = block_found.address;
free_list_left[i-1].block_size = (block_found.block_size)/2;
free_list_left[i-1].isempty = 1;
free_list_right[i-1].address = (block_found.address + (block_found.block_size)/2 );
free_list_right[i-1].block_size = (block_found.block_size)/2;
free_list_right[i-1].isempty = 1;
// now that the blocks have been split, must make sure to remove the
// block from the free list that you broke
// LOOK HERE!!!!!!!!!!!!!!!!!!!!
if(leftright == 0)
free_list_left[i].isempty = 0;
else
free_list_right[i].isempty = 0;
// LOOK HERE!!!!!!!!!!!!!!!!!!!!
return my_malloc(_length);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment