2.7 操作系统 内存

一、malloc 默认大约能申请 3 个多 G 的虚拟堆内存。

二、内存管理方式

1、块式管理

把主存分为一块一块的,即使程序片段只有几个字节,也只能将这一块分配给它,会造成很大的内存碎片。

2、页式管理

页的大小固定,由系统决定,系统将逻辑地址划分为页号和页内地址两部分。可以离散分配,减少内存碎片,但仍然容易产生内部碎片。但页长与程序的逻辑大小没关系。

3、段式管理

段是按照程序的自然分界划分的并且长度可以动态改变的区域。段与段在内存中可以不相邻,实现了离散分配。

4、段页式管理

1)用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。

2)用分页方法来分配和管理内存,即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。

三、虚拟内存与物理内存

定义:虚拟内存是一种抽象的内存管理技术,为每个进程提供一个独立的虚拟地址空间,操作系统通过内存管理单元(MMU)将虚拟地址映射到物理地址。

虚拟内存的好处:扩展内存容量、内存隔离、内存连续,简化程序设计、提高系统整体性能(只将最常用的数据放到物理内存中)。

虚拟内存工作原理:

1、分页机制:虚拟内存+通过分页将内存划分为固定大小的页面(通常是 4KB),并将物理内存也划分为同样大小的页面框。当进程需要访问某个虚拟内存页时,操作系统会将其映射到物理内存中的页面框。如果该页面当前不在物理内存中(即页面缺失),会抛出异常,操作系统会从硬盘中加载该页面。

2、页面交换:当物理内存不足时,操作系统会将一些页面从内存交换到磁盘,释放内存空间供其他进程使用。这个过程称为页面交换,通常会影响系统的性能,因为磁盘访问速度比内存慢得多。

3、内存管理单元(MMU):内存管理单元(MMU)是硬件组件,负责将虚拟地址转换为物理地址。

四、解释下内存碎片:内碎片,外碎片

内碎片是在已分配的内存块内部产生的(包括间隙和页剩余部分,这些间隙无法重新再分配),而外碎片是在未分配的空闲内存区域中形成的(连续的虚拟内存区域太小,不能满足进程的内存分配请求,也就导致这些虚拟内存对应物理内存无法进行分配)。

五、页表

定义:页表是操作系统中用于管理虚拟内存与物理内存之间映射关系的数据结构。它将虚拟内存中的虚拟地址映射到物理内存中的物理地址。操作系统通过页表来记录每个虚拟页面(虚拟地址空间中的一个固定大小的块)和物理页面框(物理内存中的一块对应大小的区域)之间的对应关系。页表的存在使得操作系统能够实现虚拟内存的管理和隔离

作用:1、实现虚拟内存和物理内存的映射;2、帮助系统进行内存管理;3、记录了访问权限信息,能够进行内存保护;4、通过虚拟化技术让每个虚拟机有独立的虚拟地址空间。

为什么需要页表?

1、提供虚拟内存支持。

2、提高物理内存利用率:系统只会将实际需要的页面加载到物理内存中,而不是将整个进程的内存加载到物理内存。

3、内存的

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论
malloc上限问下
点赞 回复 分享
发布于 04-02 20:51 河北
malloc上限问下
点赞 回复 分享
发布于 04-01 23:10 河北
欢迎订阅专栏《C++/嵌入式开发 秋招面经》 :https://www.nowcoder.com/creation/manager/columnDetail/MKaoll
点赞 回复 分享
发布于 03-30 17:09 河北

相关推荐

评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务