Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Seven Databases In Seven Weeks A Guide To Modern Databases And The NoSQL Movement

Authors: Luc Perkins, Eric Redmond, Jim Wilson

2nd Edition

1680502530, 978-1680502534

More Books

Students also viewed these Databases questions

Question

What are the Five Phases of SDLC? Explain each briefly.

Answered: 1 week ago

Question

How can Change Control Procedures manage Project Creep?

Answered: 1 week ago