卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 操作系统

    • 基础概念

    • 进程与线程

    • 中断与异常

    • 同步与互斥

    • 死锁

    • 内存管理

      • 什么是虚拟内存?为什么需要虚拟内存?
      • 什么是内存分段和分页?作用是什么?
      • 有哪些页面置换算法?
      • 虚拟内存的作用及页面置换算法?
      • 内存连续分配管理方式有什么?
        • 简要回答
        • 专业回答
        • 代码示例
        • 知识拓展
    • I/O 与设备管理

    • 其他

  • 网络

  • 数据库

# 内存连续分配管理方式有什么?

# 简要回答

内存连续分配管理方式是指:每个进程在主存中占用一段连续的物理地址空间。

典型方式包括:

单一连续分配

固定分区分配

动态分区分配(首次适应、最佳适应、最坏适应、邻近适应)

该类方法实现简单,但容易产生内部碎片或外部碎片,已逐渐被分页、分段机制取代

# 专业回答

内存连续分配要求:

进程在内存中所占用的地址空间是一段连续的物理内存区域

内存地址必须: start ~ start + size - 1

连续分配的三大类方式(重点)

(一)单一连续分配(Single Contiguous Allocation)

原理:内存被分为两部分,操作系统,用户程序

内存中只能同时存在一个用户进程

特点:无内存管理复杂性,无碎片问题,CPU利用率极低

(二)固定分区分配(Fixed Partition Allocation)

原理:内存启动时被划分为若干个固定大小的分区,每个分区只能装一个进程

可以分为:等大小分区,不等大小分区

它的核心问题是内部碎片

(三)动态分区分配(Dynamic Partition Allocation)

原理:不提前固定划分分区,进程来时才分配恰当大小的连续内存

四种典型的分配算法:首次适应,最佳适应,最坏适应,邻近适应

# 代码示例

动态分区 + 首次适应算法(First Fit)

#include <stdio.h>

#define MEM_SIZE 1024

typedef struct block {
    int start;
    int size;
    int free; // 1表示空闲,0表示已分配
    struct block *next;
} Block;

Block *head = NULL;

void init_memory() {
    head = (Block *)malloc(sizeof(Block));
    head->start = 0;
    head->size = MEM_SIZE;
    head->free = 1;
    head->next = NULL;
}

Block* first_fit(int request_size) {
    Block *curr = head;
    while (curr != NULL) {
        if (curr->free && curr->size >= request_size) {
            return curr;
        }
        curr = curr->next;
    }
    return NULL; // 没有足够大的空闲块
}

int main() {
    init_memory();
    // 模拟分配过程...
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 知识拓展

为什么连续分配被淘汰?

需要连续空间,易产生碎片,内存利用率低

分页机制

逻辑连续,物理可不连续,从根本上解决碎片问题

  • 适用场景

早期操作系统,教学实验,嵌入式/资源简单系统

  • 知识图解

image

image

  • 面试官很能追问

Q1:连续分配最大的缺点是什么?

答: 容易产生碎片,尤其是外部碎片,导致内存利用率低。

Q2:为什么固定分区会产生内部碎片?

答: 因为分区大小固定,进程往往小于分区,剩余空间无法再利用。

Q3:动态分区为什么还会有问题?

答: 虽然分配灵活,但多次分配释放后,空闲内存被切碎,形成外部碎片

Last Updated: 3/10/2026, 6:08:48 PM

← 虚拟内存的作用及页面置换算法? I/O控制方式有什么? →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪