You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C++实现的First Fit内存分配代码修改为Worst Fit算法

最坏适应(Worst Fit)算法适配实现方法

你现有代码仅需要修改PutInMemory函数的空闲块查找逻辑即可完成最坏适配算法的切换,其余的内存释放、统计、打印逻辑无需改动。

核心逻辑差异说明

  • 原有First Fit逻辑:从低地址开始遍历,找到第一个容量满足需求的空闲块就直接分配
  • 需要修改的Worst Fit逻辑:遍历所有空闲块,记录所有容量满足需求的空闲块中容量最大的块,最终选择该块进行分配

修改后的PutInMemory函数代码

int PutInMemory(int memory[], int size) {
    if (size < 1) {
        cout << "Error!" << endl;
        return 0;
    }
    int maxBlockSize = 0;
    int maxBlockStart = -1;
    // 遍历所有内存,找到最大的满足需求的空闲块
    for (int i = 0; i < 256; i++) {
        if (memory[i] < 0) { // 空闲块起始位置
            int currentBlockSize = abs(memory[i]);
            // 如果当前块大小满足需求,且比之前记录的最大块更大,就更新记录
            if (currentBlockSize >= size && currentBlockSize > maxBlockSize) {
                maxBlockSize = currentBlockSize;
                maxBlockStart = i;
            }
            // 跳过当前空闲块的剩余部分,直接到下一个块的起始位置
            i += currentBlockSize - 1;
        }
    }
    // 没有找到符合要求的块
    if (maxBlockStart == -1) {
        cout << "Out of Memory";
        return 0;
    }
    int j = maxBlockStart;
    if (j + size <= 256) {
        memory[j] = size;
        for (int i = j + 1; i < j + size; i++)
            memory[i] = 0;
        int i = j + size;
        int count = 0;
        while (memory[i] <= -1 && i < 256) {
            count++;
            i++;
        }
        if (count != 0) {
            memory[i - 1] = -count;
            memory[j + size] = -count;
        }
        return j;
    } else {
        cout << "Out of memory";
        return 0;
    }
}

验证说明

替换原有代码中的PutInMemory函数即可直接运行,原有功能全部保留,分配逻辑已经切换为最坏适应算法:每次分配都会优先选择当前最大的空闲块,避免产生大量难以利用的小碎片。


内容的提问来源于stack exchange,提问作者Mohammed Hamdoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:27:03