81 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
#define BLOCKS 4
 | 
						|
#define REQUESTS 5
 | 
						|
 | 
						|
// Memory configuration
 | 
						|
int memory[BLOCKS] = {100, 50, 25, 10};
 | 
						|
int allocated[BLOCKS] = {0, 0, 0, 0};
 | 
						|
 | 
						|
// Helper: Reset allocation state
 | 
						|
void resetAllocation() {
 | 
						|
    for(int i = 0; i < BLOCKS; i++) {
 | 
						|
        allocated[i] = 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// Print memory status
 | 
						|
void printMemory() {
 | 
						|
    printf("\nMemory Status:\n");
 | 
						|
    for(int i = 0; i < BLOCKS; i++) {
 | 
						|
        printf("[Size: %d, %s] -> ", memory[i],
 | 
						|
               allocated[i] ? "Allocated" : "Free");
 | 
						|
    }
 | 
						|
    printf("NULL\n\n");
 | 
						|
}
 | 
						|
 | 
						|
// First Fit allocation
 | 
						|
void firstFit(int size) {
 | 
						|
    for(int i = 0; i < BLOCKS; i++) {
 | 
						|
        if (!allocated[i] && memory[i] >= size) {
 | 
						|
            allocated[i] = 1;
 | 
						|
            printf("Allocated %d bytes using First Fit\n", size);
 | 
						|
            return;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    printf("First Fit: No suitable block found for %d bytes\n", size);
 | 
						|
}
 | 
						|
 | 
						|
// Best Fit allocation
 | 
						|
void bestFit(int size) {
 | 
						|
    int best = -1;
 | 
						|
    int bestSize = 999999;
 | 
						|
 | 
						|
    for(int i = 0; i < BLOCKS; i++) {
 | 
						|
        if(!allocated[i] && memory[i] >= size && memory[i] < bestSize) {
 | 
						|
            bestSize = memory[i];
 | 
						|
            best = i;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    if(best != -1) {
 | 
						|
        allocated[best] = 1;
 | 
						|
        printf("Allocated %d bytes using Best Fit\n", size);
 | 
						|
    } else {
 | 
						|
        printf("Best Fit: No suitable block found for %d bytes\n", size);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// Main function: run allocation sequence
 | 
						|
int main() {
 | 
						|
    int requests[REQUESTS] = {15, 35, 60, 10, 5};
 | 
						|
 | 
						|
    printf("=== FIRST FIT ===\n");
 | 
						|
    printMemory();
 | 
						|
    for(int i = 0; i < REQUESTS; i++) {
 | 
						|
        firstFit(requests[i]);
 | 
						|
        printMemory();
 | 
						|
    }
 | 
						|
 | 
						|
    resetAllocation();
 | 
						|
 | 
						|
    printf("=== BEST FIT ===\n");
 | 
						|
    printMemory();
 | 
						|
    for(int i = 0; i < REQUESTS; i++) {
 | 
						|
        bestFit(requests[i]);
 | 
						|
        printMemory();
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 |