1

add debug output toggle

This commit is contained in:
2022-05-23 09:51:35 +02:00
parent 058447c47a
commit f2646300d8
2 changed files with 12 additions and 10 deletions

View File

@ -32,4 +32,6 @@ extern unsigned int total_mem; // RAM total
// extern LinkedListAllocator allocator; // extern LinkedListAllocator allocator;
extern TreeAllocator allocator; extern TreeAllocator allocator;
constexpr bool DEBUG = true;
#endif #endif

View File

@ -41,12 +41,12 @@ void* TreeAllocator::alloc(unsigned int req_size) {
// the list_block_t is part of every block, but when freeing // the list_block_t is part of every block, but when freeing
// memory we need enough space to store the rbt metadata // memory we need enough space to store the rbt metadata
rreq_size = sizeof(tree_block_t) - sizeof(list_block_t); rreq_size = sizeof(tree_block_t) - sizeof(list_block_t);
// kout << " - Increased block size for rbt metadata" << endl; if (DEBUG) kout << " - Increased block size for rbt metadata" << endl;
} }
unsigned int req_size_diff = (BASIC_ALIGN - rreq_size % BASIC_ALIGN) % BASIC_ALIGN; unsigned int req_size_diff = (BASIC_ALIGN - rreq_size % BASIC_ALIGN) % BASIC_ALIGN;
rreq_size = rreq_size + req_size_diff; rreq_size = rreq_size + req_size_diff;
if (req_size_diff > 0) { if (req_size_diff > 0) {
// kout << " - Rounded to word border (+" << dec << req_size_diff << " bytes)" << endl; if (DEBUG) kout << " - Rounded to word border (+" << dec << req_size_diff << " bytes)" << endl;
} }
// Finds smallest block that is large enough // Finds smallest block that is large enough
@ -57,19 +57,19 @@ void* TreeAllocator::alloc(unsigned int req_size) {
} }
if (best_fit->allocated) { if (best_fit->allocated) {
// Something went really wrong // Something went really wrong
// kout << " - Block already allocated :(" << endl; kout << " - Block already allocated :(" << endl;
return NULL; return NULL;
} }
best_fit->allocated = true; best_fit->allocated = true;
unsigned int size = this->get_size(best_fit); unsigned int size = this->get_size(best_fit);
// kout << " - Found best-fit: " << hex << (unsigned int)best_fit << endl; if (DEBUG) kout << " - Found best-fit: " << hex << (unsigned int)best_fit << endl;
// Remove the block first so we can insert correctly when cutting // Remove the block first so we can insert correctly when cutting
// kout << " - Removing block from freelist" << endl; // kout << " - Removing block from freelist" << endl;
this->rbt_remove(best_fit); this->rbt_remove(best_fit);
if (size > HEAP_MIN_FREE_BLOCK_SIZE + rreq_size + sizeof(list_block_t)) { if (size > HEAP_MIN_FREE_BLOCK_SIZE + rreq_size + sizeof(list_block_t)) {
// Block can be cut // Block can be cut
// kout << " - Allocating " << dec << rreq_size << " Bytes with cutting" << endl; if (DEBUG) kout << " - Allocating " << dec << rreq_size << " Bytes with cutting" << endl;
// [best_fit_start | sizeof(list_block_t) | rreq_size | new_block_start] // [best_fit_start | sizeof(list_block_t) | rreq_size | new_block_start]
tree_block_t* new_block = (tree_block_t*)((char*)best_fit + sizeof(list_block_t) + rreq_size); tree_block_t* new_block = (tree_block_t*)((char*)best_fit + sizeof(list_block_t) + rreq_size);
@ -80,10 +80,10 @@ void* TreeAllocator::alloc(unsigned int req_size) {
// Don't cut block // Don't cut block
// The block is already correctly positioned in the linked list so we only // The block is already correctly positioned in the linked list so we only
// need to remove it from the freelist, which is done for both cases // need to remove it from the freelist, which is done for both cases
// kout << " - Allocating " << dec << rreq_size << " Bytes without cutting" << endl; if (DEBUG) kout << " - Allocating " << dec << rreq_size << " Bytes without cutting" << endl;
} }
// kout << " - Returned address " << hex << (unsigned int)((char*)best_fit + sizeof(list_block_t)) << endl; if (DEBUG) kout << " - Returned address " << hex << (unsigned int)((char*)best_fit + sizeof(list_block_t)) << endl;
return (void*)((char*)best_fit + sizeof(list_block_t)); return (void*)((char*)best_fit + sizeof(list_block_t));
} }
@ -107,7 +107,7 @@ void TreeAllocator::free(void* ptr) {
if (!next->allocated) { if (!next->allocated) {
// Merge forward // Merge forward
// kout << " - Merging forward" << endl; if (DEBUG) kout << " - Merging forward" << endl;
// Remove the next block from all lists as it is now part of our freed block // Remove the next block from all lists as it is now part of our freed block
this->dll_remove(next); this->dll_remove(next);
@ -120,13 +120,13 @@ void TreeAllocator::free(void* ptr) {
if (!previous->allocated) { if (!previous->allocated) {
// Merge backward // Merge backward
// kout << " - Merging backward" << endl; if (DEBUG) kout << " - Merging backward" << endl;
// Remove the current block from all lists as it is now part of the previous block // Remove the current block from all lists as it is now part of the previous block
// It doesn't have to be removed from rbt as it wasn't in there as it was allocated before // It doesn't have to be removed from rbt as it wasn't in there as it was allocated before
this->dll_remove(block); this->dll_remove(block);
this->rbt_remove((tree_block_t*)previous); this->rbt_remove((tree_block_t*)previous);
this->rbt_insert((tree_block_t*)previous); this->rbt_insert((tree_block_t*)previous); // Reinsert with new size
} }
} }