Question: Pls help me Encode, compile, debug the following code about memory management. I'll assure you to give a thumbs up! #include stdafx.h #include #include #include
Pls help me Encode, compile, debug the following code about memory management. I'll assure you to give a thumbs up!
#include "stdafx.h" #include
using namespace std;
struct allocList { char *startAlloc; char *endAlloc; int fk_pid; allocList *nxt; };
struct procList { int pid; int jobStatus; char *startProc; char *endProc; procList *nxt; };
bool initProc(procList *&, int*, int); bool initAlloc(allocList *&, int*, int); int doFirstFit(procList *, allocList*); int cmptFragmentation(procList*, allocList*); int search(procList*, int); bool reset(procList*,allocList*);
int_tmain(int argc, _TCHAR* argv[]) { int arrMemory[] = {100, 500, 200, 300, 600}; int arrJobs[] = {212, 17, 112, 426, 500}; allocList *ptrProcStart = NULL; procList *ptrArrProc = NULL; initProc(ptrProcStart, arrJobs, (sizeof(arrJobs)/sizeof(int))); initAlloc(ptrAllocStart, arrMemory, (sizeof(arrMemory)/sizeof(int))); cout << "Memory Block: " << endl << "Block\tSpace" << endl; int i; for (i=0; i < sizeof(arrMemory)/sizeof(int); i++) cout << i + 1 << "\t" << arrMemory[i] << endl; cout << " Jobs: " << endl << "Job\tSize" << endl; for (i=0; i < sizeof(arrJobs)/sizeof(int); i++) cout << i + 1 << "\t" << arrJobs[i] << endl; int jobLoaded = 0; int fragmentation = 0; jobLoaded = doFirstFit (ptrProcStart, ptrAllocStart); fragmentation = cmptFragmentation(ptrProcStart, ptrAllocStart); allocList *memtrav = ptrAllocStart; getch(); return 0; }
bool initProc (procList *&ptrProcStart, int* ptrArrProc, int length) { int i; procList *ptrProc = ptrProcStart; for (i=0; i < length; i++) { if(ptrProc != NULL) { ptrProc -> nxt = newprocList; ptrProc = ptrProc -> nxt; ptrProc -> startProc = (char*)malloc(*(ptrArrProc + i)); ptrProc -> endProc =ptrProc -> startProc + *(ptrArrProc + i); memset(ptrProc -> startProc, 'a' + i, *(ptrArrProc + i)); ptrProc -> jobStatus = 0; ptrProc -> pid = i; ptrProc -> nxt = NULL; } else { ptrProc = newprocList; ptrProc -> startProc = (char*)malloc(*(ptrArrProc + i)); ptrProc ->endProc = ptrProc -> startProc + *(ptrArrProc + i); memset(ptrProc -> startProc, 'a' + i, *(ptrArrProc + i)); ptrProc -> jobStatus = 0; ptrProc -> pid = i; ptrProc -> nxt = NULL; ptrProcStart = ptrProc; } } return true; }
bool initAlloc (allocList *&ptrAllocStart, int *ptrArrAlloc, int length) { int i; allocList *ptrAlloc = ptrAllocStart; for (i=0; i < length; i++) { if(ptrAlloc != NULL) cout << " First Fit: Memory Block\tSize\tJob\tInternal "<<" Fragmentation "; int i = 0; while (memory != NULL) { i++; cout << "\t" << i << "\t" << memory -> endAlloc-memory -> startAlloc << "\t" << memory -> fk_pid << "\t" << memory -> endAlloc-memory -> startAlloc-search(proc, memory -> fk_pid-1) << endl; memory = memory -> nxt; } } return 0; }
int search(procList* job, int id) { int size = 0; while (job != NULL) { if (job -> pid ==id) { size = (int)job -> endProc-(int)job -> startProc; break; } job =job -> nxt; } return size; }
int cmptFragmentation(procList* jobs, allocList* mem) { allocList *memtrav, *temp; procList *jobtrav; jobtrav = jobs; memtrav = mem; int freespace = 0, memsize, jobsize; int i = 0; while (memtrav -> nxt != NULL) { if(memtrav -> nxt -> fk_pid==0) { freespace += (memtrav -> nxt -> endAlloc-memtrav -> nxt -> startAlloc); temp = memtrav -> nxt; memtrav -> nxt = memtrav -> nxt -> nxt; delete temp; } memtrav = memtrav -> nxt; } if (memtrav -> fk_pid == 0) { freespace += memtrav -> endAlloc-memtrav -> startAlloc; memtrav = memtrav -> nxt; } memtrav = mem; while (memtrav != NULL) { jobsize = search (jobs, memtrav -> fk_pid-1); memsize = memtrav -> endAlloc-memtrav -> startAlloc; if (memtrav -> fk_pid != 0) { memtrav -> endAlloc = memtrav -> startAlloc + jobsize; } freespace += (memsize-jobsize); memtrav = memtrav -> nxt; } memtrav = mem; while (memtrav != NULL) { if (memtrav -> nxt==NULL) { memtrav -> nxt =newallocList; memtrav = memtrav -> nxt; memtrav -> startAlloc = (char*)malloc(freespace); memtrav -> endAlloc = memtrav -> startAlloc + freespace; memset (mentrav -> startAlloc, 0, freespace); memtrav -> fk_pid = 0; memtrav -> nxt = NULL; break; } memtrav = memtrav -> nxt; } memtrav = mem; cout << endl << endl << "Defragmentation Memory"<<"Block\tSize\tJob\tFreeSpace "; while (memtrav != NULL) { i++; cout << "\t" << i << "\t" << memtrav -> endAlloc-memtrav -> startAlloc << "\t" << memtrav -> fk_pid << "\t" << memtrav -> endAlloc-memtrav -> startAlloc- search(jobs,memtrav -> fk_pid-1) << endl; memtrav = memtrav -> nxt; } while(jobtrav != NULL) { if (jobtrav -> jobStatus==0) { doFirstFit (jobs, mem); cmptFragmentation (jobs, mem); } jobtrav = jobtrav -> nxt; } return 0; }
bool reset (procList* jobs, allocList* mem) { procList* tempj = jobs; allocList* tempa = mem; while (jobs -> nxt != NULL) { jobs = jobs -> nxt; free(tempj); tempj = jobs; } free(tempj); while (mem -> nxt != NULL) { mem = mem -> nxt; free(tempa); tempa = mem; } free(tempa); return true; }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
