From 71342900db30fb8937b8f002dbf30652f924af1f Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Thu, 16 Nov 2023 23:46:54 -0400 Subject: [PATCH] Pass all tests --- Assignment6/code/main.c | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Assignment6/code/main.c b/Assignment6/code/main.c index 2e53e06..dd0894d 100644 --- a/Assignment6/code/main.c +++ b/Assignment6/code/main.c @@ -33,53 +33,55 @@ bool doAllocate(int howMuchToAllocate, int processId) { int FirstFitIndex = -1; int WorstFitIndex = -1; int BestFitIndex = -1; + int startIndex = -1; int size = 0; + int smallestSoFar = memSize; int biggestSoFar = 0; for (int i = 0; i < memSize; ++i) { if (memory[i] == 0) { + if (size == 0) { + startIndex = i; + } size++; - // GTE, because we need to keep track of all algorithm indexes - if (size == howMuchToAllocate) { - // On first fit, set the index + } else { + if (size >= howMuchToAllocate) { + // On first fit, set the start index if (FirstFitIndex == -1) { - FirstFitIndex = i - size + 1; + FirstFitIndex = startIndex; + } + // If the size of the contiguous empty memory is bigger than the largest contiguous empty memory so far, set the index and update the size + if (size > biggestSoFar) { + WorstFitIndex = startIndex; biggestSoFar = size; + } + // If the size of the contiguous empty memory is smaller than the smallest contiguous empty memory so far, set the index and update the size + if (size > 0 && smallestSoFar > size) { + BestFitIndex = startIndex; smallestSoFar = size; } } - // If the size of the contiguous empty memory is bigger than the largest contiguous empty memory so far, set the index and update the size - if (size >= biggestSoFar) { - WorstFitIndex = i - size + 1; - biggestSoFar = size; - } - - } else { - // If the size of the contiguous empty memory is smaller than the smallest contiguous empty memory so far, set the index and update the size - if (smallestSoFar >= size) { - BestFitIndex = i - size + 1; - smallestSoFar = size; - } size = 0; + startIndex = -1; } } - // Check if the last chunk is the smallest - if (smallestSoFar >= size) { - BestFitIndex = memSize - size; + // Check if the last chunk is the first fit + if (FirstFitIndex == -1 && size >= howMuchToAllocate) { + FirstFitIndex = startIndex; } - if (howMuchToAllocate > memSize) { - printf("Process %d failed to allocate %d memory\n", processId, howMuchToAllocate); - // Statistics - totalFailed++; - - // Early exit because there is no space, so don't touch memory - return false; + // Check if the last chunk is the smallest + if (size > 0 && smallestSoFar >= size) { + BestFitIndex = startIndex; + } + // Check if the last chunk is the biggest + if (size >= biggestSoFar) { + WorstFitIndex = startIndex; } // Since first fit is always set if there is space, we can error on that for any algorithm - if (FirstFitIndex == -1) { + if (FirstFitIndex == -1 || howMuchToAllocate > memSize) { printf("Process %d failed to allocate %d memory\n", processId, howMuchToAllocate); // Statistics totalFailed++; @@ -172,7 +174,7 @@ int getSmallest() { } } // Check if the last chunk is the smallest - if (smallestSize == memSize) { + if (smallestSize >= memSize) { smallestSize = size; } return smallestSize; @@ -184,15 +186,13 @@ int getBiggest() { for (int i = 0; i < memSize; ++i) { if (memory[i] == 0) { size++; - } else { - if (size > biggestSize) { - biggestSize = size; - } + } else if (size > biggestSize) { + biggestSize = size; size = 0; } } // Check if the last chunk is the biggest - if (biggestSize == 0) { + if (biggestSize <= size) { biggestSize = size; } return biggestSize;