Next Fit in C++

Definition

Next fit is another version of First Fit in which memory is searched for empty spaces similar to the first fit memory allocation scheme. Unlike first-fit memory allocation, the only difference between the two is, in the case of next fit, if the search is interrupted in between, the new search is carried out from the last location.

C++ Program for Next Fit Memory Management

// C++ implementation code for next fit memory allocation scheme
#include <bits/stdc++.h>
using namespace std;

// Method to assign memory to a block using the next fit memory allocation scheme
void NextFit(int b_size[], int m, int p_size[], int n)
{
//code to store block id of a block to a process demanding memory
int allocation[n], j = 0;

// No process is assigned with memory at the initial phase

memset(allocate, -1, sizeof(allocate));

// pick each process and find suitable blocks
// according to its size ad assign to it

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

// Condition to control memory search not from the beginning

while (j < m) { if (b_size[j] >= p_size[i]) {

// code to assign block j to p[i] process
allocation[i] = j;

// Reduce available memory in this block.
blockSize[j] -= processSize[i];

break;
}

// mod m will help to traverse the free memory blocks from the first block when it reaches end
j = (j + 1) % m;
}
}

cout << "\nProcess Number\tProcess Size\tBlock Number \n";
for (int i = 0; i < n; i++) {
cout << " " << i + 1 << "\t\t" << p_size[i]
<< "\t\t";
if (allocate[i] != -1)
cout << allocate[i] + 1;
else
cout << "Not Allocated";
cout << endl;
}
}

// Driver program
int main()
{
int b_size[] = { 5, 10, 20 };
int p_size[] = { 10, 20, 5 };
int m = sizeof(b_size) / sizeof(b_size[0]);
int n = sizeof(p_size) / sizeof(p_size[0]);

NextFit(b_size, m, p_size, n);

return 0;
}

Output

Process Number    Process Size    Block Number

1                                           10                          2

2                                           20                         3

3                                           5                            1