answersLogoWhite

0


Best Answer

#include<stdio.h>

typedef struct hole

{

int id,size,inf,ef,filled,pid,psize;

}hole;

typedef struct process

{

int id,size,comp;

}process;

hole h[50];

process p[50];

int m,n,intfrag,exfrag;

void output()

{

int i;

intfrag=exfrag=0;

printf("\n\n\nHole Process IF EF\n");

for(i=0;i<m;i++)

{

printf("\n%d %d %d %d",h[i].size,h[i].psize,h[i].inf,h[i].ef);

intfrag=intfrag+h[i].inf;

exfrag=exfrag+h[i].ef;

}

}

void final()

{

int i;

for(i=0;i<n;i++)

{

if(p[i].comp==0)

{

printf("There is no memory for the process of size %d\n",p[i].size);

}

}

}

void input()

{

int i,max,flag;

max=flag=0;

printf("\nEnter total no of holes:\n");

scanf("%d",&m);

for(i=0;i<m;i++)

{

h[i].id=i;

printf("\nEnter size of hole %d:\n",i+1);

scanf("%d",&h[i].size);

h[i].inf=0;

h[i].ef=h[i].size;

h[i].filled=0;

h[i].pid=0;

h[i].psize=0;

}

for(i=0;i<m;i++)

{

if(h[i].size<0)

{

printf("\nInvalid input as hole size is negative");

flag=1;

}

if(h[i].size>max)

{

max=h[i].size;

}

}

printf("\nEnter total no of processes:\n");

scanf("%d",&n);

for(i=0;i<n;i++)

{

p[i].id=i;

printf("\nEnter size of process %d:\n",i+1);

scanf("%d",&p[i].size);

p[i].comp=0;

}

for(i=0;i<n;i++)

{

if(p[i].size<0)

{

printf("\nInvalid input as process size is negative");

flag=1;

}

if(p[i].size>max)

{

printf("\nInvalid input as process size is greater than max size of hole\n");

flag=1;

}

}

if(flag==0)

{

output();

}

}

void first()

{

int i,j;

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

if(p[i].size<=h[j].size && p[i].comp==0 && h[j].filled==0)

{

p[i].comp=1;

h[j].filled=1;

h[j].psize=p[i].size;

h[j].id=p[i].id;

h[j].inf=h[j].size-p[i].size;

h[j].ef=0;

output();

}

}

}

printf("\n\n\nInternal Fragmentation:%d",intfrag);

printf("\n\n\nExternal Fragmentation:%d\n\n",exfrag);

final();

}

void best()

{

int min,i,j,sub,var;

for(i=0;i<n;i++)

{

min=999;

sub=0;

for(j=0;j<m;j++)

{

if(p[i].size<=h[j].size && p[i].comp==0 && h[j].filled==0)

{

sub=h[j].size-p[i].size;

if(min>sub)

{

min=sub;

var=j;

}

}

}

p[i].comp=1;

h[var].filled=1;

h[var].psize=p[i].size;

h[var].id=p[i].id;

h[var].inf=h[var].size-p[i].size;

h[var].ef=0;

output();

}

printf("\n\n\nInternal Fragmentation:%d",intfrag);

printf("\n\n\nExternal Fragmentation:%d\n\n",exfrag);

final();

}

void next()

{

int i,j,a;

a=j=0;

for(i=0;i<n;i++)

{

for(j=a;j<m;j++)

{

if(p[i].size<=h[j].size && p[i].comp==0 && h[j].filled==0)

{

p[i].comp=1;

h[j].filled=1;

h[j].psize=p[i].size;

h[j].id=p[i].id;

h[j].inf=h[j].size-p[i].size;

h[j].ef=0;

output();

a=(j+1)%m;

}

}

}

printf("\n\n\nInternal Fragmentation:%d",intfrag);

printf("\n\n\nExternal Fragmentation:%d\n\n",exfrag);

final();

}

void main()

{

int ch;

printf("\n\n\n**********MEMORY ALLOCATION**********\n\n");

printf("\n1.First Fit Algorithm\n2.Best Fit Algorithm\n3.Next Fit Algorithm");

printf("\nEnter your choice:\n");

scanf("%d",&ch);

switch(ch)

{

case 1: input();

first();

break;

case 2: input();

best();

break;

case 3: input();

next();

break;

}

}

Written by: Fabianski Benjamin

User Avatar

Wiki User

11y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: How do you write a c code for memory allocation algorithms?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Related questions

Advantages of dynamic memory allocation in data structure?

The main advantage of dynamic memory allocation is flexibility: the sizes of structures (or upper bounds on the sizes) do not need to be known in advance, so any size input that does not exceed available memory is easily handled. There are costs, however. Repeated calls to allocate and de-allocate memory place considerable strain on the operating system and can result in "thrashing" and decreased performance. In addition, one has to be very careful to "clean up" and de-allocate any memory that is allocated dynamically, to avoid memory leaks. The general rule of thumb is, if you can allocate memory statically, do it, because the result will probably be faster code that is easier to debug. But if you need to handle wide-ranging input sizes, then dynamic memory allocation is the way to do it.


What steps are necessary to build an algorithms?

the number of steps of an algorithm will be countable and finite.


Are algorithms only meant for computers?

No. Indeed, algorithms are actually meant for humans, not computers. Computer programmers translate algorithms into working code such that a computer can process the algorithm. The code is actually the implementation of the algorithm, not the algorithm itself.


What is the Conceptual Memory Map of a C Program?

C++ has 4 distinct regions for memory distribution Stack : This region is used for function calls' return addresses , arguments and local variables Heap : This region is for dynamic allocation of memory (dynamic variables created on run time use this memory , aka RAM) Global Variables : This is used for global variables defined by the programmer Program Code : This region is for the program code.


What happens when class libraries leak memory in c plus plus?

A memory leak is when allocated memory that is no longer needed is not deallocated. Eventually, the memory pool is unable to satisfy an allocation request, and the program fails. A memory leak is a programming bug. When class libraries leak memory, they need to be fixed, just like any other piece of code that has bugs. If they came from a vendor, then that vendor needs to fix them.


What if your accounting code structure is the basis for which other?

Transaction Allocation and management


C code to implement the file allocation algorithm?

yes we can do it,in c


Functions of the memory manager?

Memory management functions handle the allocation and deallocationof dynamic Memory. These functions form an abstraction layer above the standard C memory management functionsmalloc, free, and realloc.This block of functions can be replaced by the user with custom code to implement a different memory management scheme. For example, an embedded system application might want to use a fixed-sized static block from which to allocate.


What are dynamic memory allocation advantages?

Often an application needs additional memory for the temporary storage of data. For example, the C programming language allows the programmer to use the MALLOC (memory allocate) function to grab a chunk of memory suitable for the applications needs. Failure to release the memory after it is used by using the FREE function can result in problems. It is called dynamic memory allocation because the memory is allocated at run-time, as needed. Unlike variables created within functions - the memory is not allocated on the processor stack, instead, when using MALLOC or the 'new' keyword, memory is allocated in the applications virtual address space.


How do fixed a stack overflow at line 203?

Allocate more memory to the stack or write code that does not leave stuff on the stack.


C code euclidean algorithms?

bvn bvn bn bvn bv


What is the C source code for indexed file allocation?

int main (void) { puts ("File allocation methods"); return 0; }