**Contiguous Memory Allocation Techniques**

**First Fit**

In the first fit approach is to allocate the first free partition or hole large enough which can accommodate the process. It finishes after finding the first suitable free partition.

**Best Fit**

The best fit deals with allocating the smallest free partition which meets the requirement of the requesting process. This algorithm first searches the entire list of free partitions and considers the smallest hole that is adequate. It then tries to find a hole which is close to actual process size needed.

**Worst fit**

In worst fit approach is to locate largest available free portion so that the portion left will be big enough to be useful. It is the reverse of best fit.

**Program Code for First Fit**

#include<stdio.h> #include<conio.h> #define max 25 void main() { int frag[max],b[max],f[max],i,j,nb,nf,temp; static int bf[max],ff[max]; clrscr(); printf("\nEnter the number of blocks:"); scanf("%d",&nb); printf("Enter the number of files:"); scanf("%d",&nf); printf("\nEnter the size of the blocks:-\n"); for(i=1;i<=nb;i++) { printf("Block %d:",i); scanf("%d",&b[i]); } printf("Enter the size of the files:-\n"); for(i=1;i<=nf;i++) { printf("File %d:",i); scanf("%d",&f[i]); } for(i=1;i<=nf;i++) { for(j=1;j<=nb;j++) { if(bf[j]!=1) { temp=b[j]-f[i]; if(temp>=0) { ff[i]=j; break; } } } frag[i]=temp; bf[ff[i]]=1; } printf("\nFile_no:\tFile_size :\tBlock_no:\tBlock_size:\tFragment"); for(i=1;i<=nf;i++) printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]); getch(); } |
---|

**Output**

**Program Code for Best Fit**

#include<stdio.h> #include<conio.h> #define max 25 void main() { int frag[max],b[max],f[max],i,j,nb,nf,temp,lowest=10000; static int bf[max],ff[max]; clrscr(); printf("\nEnter the number of blocks:"); scanf("%d",&nb); printf("Enter the number of files:"); scanf("%d",&nf); printf("\nEnter the size of the blocks:-\n"); for(i=1;i<=nb;i++) { printf("Block %d:",i); scanf("%d",&b[i]); } printf("Enter the size of the files:-\n"); for(i=1;i<=nf;i++) { printf("File %d:",i); scanf("%d",&f[i]); } for(i=1;i<=nf;i++) { for(j=1;j<=nb;j++) { if(bf[j]!=1) { temp=b[j]-f[i]; if(temp>=0) if(lowest>temp) { ff[i]=j; lowest=temp; } } } frag[i]=lowest; bf[ff[i]]=1; lowest=10000; } printf("\nFile_no \tFile_size \tBlock_no \tBlock_size \tFragment"); for(i=1;i<=nf && ff[i]!=0;i++) printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]); getch(); } |
---|

**Output**

**Program Code for Worst Fit**

#include<stdio.h> #include<conio.h> #define max 25 void main() { int frag[max],b[max],f[max],i,j,nb,nf,temp,highest=0; static int bf[max],ff[max]; clrscr(); printf("\nEnter the number of blocks:"); scanf("%d",&nb); printf("Enter the number of files:"); scanf("%d",&nf); printf("\nEnter the size of the blocks:-\n"); for(i=1;i<=nb;i++) { printf("Block %d:",i); scanf("%d",&b[i]); } printf("Enter the size of the files:-\n"); for(i=1;i<=nf;i++) { printf("File %d:",i); scanf("%d",&f[i]); } for(i=1;i<=nf;i++) { for(j=1;j<=nb;j++) { if(bf[j]!=1) //if bf[j] is not allocated { temp=b[j]-f[i]; if(temp>=0) if(highest<temp) { ff[i]=j; highest=temp; } } } frag[i]=highest; bf[ff[i]]=1; highest=0; } printf("\nFile_no \tFile_size \tBlock_no \tBlock_size \tFragment"); for(i=1;i<=nf;i++) printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d",i,f[i],ff[i],b[ff[i]],frag[i]); getch(); } |
---|

**Output**

**For KTU III Sem DSA Lab Experiments Click here**

**For Other University DSA Lab Experiments Click here**