Question
Need to Implement or add A TRANVERSE FREE FUNCTION AND MAGIC NUMBER IN THE ATTACHED SOURCE CODE PLEASE HELP in C: MemoryManager.c #include MemoryManager.h #include
Need to Implement or add A TRANVERSE FREE FUNCTION AND MAGIC NUMBER IN THE ATTACHED SOURCE CODE PLEASE HELP in C:
MemoryManager.c
#include "MemoryManager.h"
#include #include #include
void* mem_manager_malloc(int size) { // printf("called mem_manager_malloc "); if(size < 0) return NULL; mmfree_t* p = locate_split(size + sizeof(mmalloc_t)); if(p == NULL) return NULL; void* ret = p->loc; p->loc += size + sizeof(mmalloc_t); p->size -= size + sizeof(mmalloc_t); mmalloc_t* q = ret; q->loc = ret + sizeof(mmalloc_t); q->size = size + sizeof(mmalloc_t); q->next = alloc_head; alloc_head = q; return ret + sizeof(mmalloc_t); }
mmalloc_t* find_alloc_mem_prev(void* ptr) { // printf("called find_alloc_mem_prev "); mmalloc_t* prev = NULL; mmalloc_t* p = alloc_head; while(p != NULL) { if(p->loc == ptr) { return prev; } prev = p; p = p->next; } return NULL; }
void mem_manager_compress(mmfree_t* p) { // printf("called mem_manager_compress "); if(p == NULL) { mem_manager_compress(free_head); return; } while(p->next != NULL) { if(p->loc + p->size + sizeof(mmfree_t) == p->next->loc) { p->size += sizeof(mmfree_t) + p->next->size; p->next = p->next->next; p = p->next; } else { break; } } }
void mem_manager_free(void* ptr) { // printf("called mem_manager_free "); if(ptr == NULL) return; mmalloc_t* alloc_prev = find_alloc_mem_prev(ptr); mmalloc_t* alloc; if(alloc_prev == NULL) { alloc = alloc_head; alloc_head = alloc_head->next; } else { alloc = alloc_prev->next; alloc_prev->next = alloc_prev->next->next; }
mmfree_t* prev = find_sorted_location(ptr); void* addr = alloc->loc - sizeof(mmalloc_t); mmfree_t* p = addr; p->loc = addr + sizeof(mmfree_t); p->size = alloc->size - sizeof(mmalloc_t); if(prev == NULL) { p->next = free_head; } else { p->next = prev->next; } mem_manager_compress(prev); }
void traverse_free_list();
void init_mem(int free_space_size) { // printf("called init_mem "); free_head = mmap(NULL, free_space_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); free_head->size = free_space_size - sizeof(mmfree_t); free_head->loc = free_head + sizeof(mmfree_t); free_head->next = NULL; }
void free_mem(int space_size) { // printf("called free_mem "); munmap(free_head, space_size); free_head = NULL; }
// Implemented using First Fit mmfree_t* locate_split(int size) { // printf("called locate_split "); mmfree_t* p = free_head; while(p != NULL) { if(p->size >= size) { return p; } p = p->next; } return NULL; }
mmfree_t* find_sorted_location(void* ptr) { // printf("called find_sorted_location "); if(free_head == NULL) return NULL; if(free_head->loc > ptr) { return NULL; } mmfree_t* p = free_head; while(p->next != NULL) { if(p->next->loc > ptr) { return p; } p = p->next; } return p; }
mmfree_t* free_head = NULL; mmalloc_t* alloc_head = NULL;
MemoryManager.h
#ifndef _MEMORY_MANAGER_H #define _MEMORY_MANAGER_H
#include
typedef struct __mmalloc_t { void* loc; int size; struct __mmalloc_t* next; } mmalloc_t;
typedef struct __mmfree_t { int size; void* loc; struct __mmfree_t* next; } mmfree_t;
extern mmfree_t* free_head; extern mmalloc_t* alloc_head;
void* mem_manager_malloc(int size); void mem_manager_free(void* ptr); // traverse the free space list starting from the head, printing out info (for debugging) void traverse_free_list(); void init_mem(int free_space_size); void free_mem(int space_size);
// called by malloc // find a free space chunk large enough for the requested allocation // obtain some memory from that chunk mmfree_t* locate_split(int size);
// called by free // locate the freed memory insert position so free space nodes are sorted by address mmfree_t* find_sorted_location(void* ptr);
#endif
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started