02-系统篇-内存分布

一.进程中的内存分布

进程是应用程序运行的单位,进程在内存中运行时,各个部分分布的情况如图。

1.栈内存(statck)
特点:后进先出
系统一般会对栈的大小进行限制,可以用命令进行查看,如下,700是进程号,栈被限制为8M。

# cat /proc/700/limits
Limit                     Soft Limit           Hard Limit           Units       
Max stack size            8388608              unlimited            bytes     


栈存储的内容:
(1)环境变量
(2)命令行参数
(3)局部变量
(4)函数
另外我们需要一个较大的内存作存储时,不能分配栈内存,栈的空间有限

2.堆内存
堆是动态内存,是由用户进行分配和管理
内存相关函数
申请:malloc() / calloc() / realloc()
释放:free()


3.数据段
(1)
.bss:存放未初始化的静态数据
static修饰的变量和全局变量
(2)
.data:已存始化的静态数据
(3)
.rodata:放常量

4.代码段
(1).text
存放用户程序代码

(2).init
环境变量的准备、命令行参数的组织和传递等

二.linux虚拟内存

linux中是多个进程一起运行,每一个进程均要使用内存,如何保证这些进程可以不互相干扰的使用内存,操作系统提出了相关的解决方案,既虚拟内存。
我们在现实中看到了内存,是电脑的内存条,如下图

假如这个内存条是1G。
针对32位系统而言,系统地址总线最大能访问的内存空间是4G,为了不浪费地址总线的能力,每一个C语言进程都拥有一个大小为4G的虚拟内存。
1G的物理内存如何与多个进程对应的多个4G的虚拟内存建立联系?并且让进程正常运行。

一般一个进程运行时,并非此进程中所有的作业都要放入内存,可以将程序的一部分装入内存,而其余部分保留在外存,将所要执行的部分不在内存时,将要执行的部分从外存导入内存,而将长期不执行的部分从内存导出至外存并腾出内存空间。


上述的导入和导出操作的最小空间单位在虚拟内存中叫页,在物理内存中叫页框,页和页框太小一样,均为4KB
这样既可以实现多个进程同时在物理内存上运行,互不干扰并且也实现了系统运行所需内存比物理内存空间还大的进程。
页和页框是有对应关系的,这种对应关系就叫页表。
页表的作用是实现逻辑空间向物理空间的转换。如下图

一个页或者页框大小是4KB,地址所在的页号+在此页的偏移量既为逻辑地址。对应的物理地址为对应的地址序号+偏移量,逻辑地址和物理地址的偏移量是一样的,因而页表所包含的映射关系仅仅是逻辑地址所在页面和物理地址所对应序号的关系。

关于linux多级页表的具体实现,本节暂不加以描述。后面专门找一节作深入研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/98094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7上源码安装Redis6

CentOS7上源码安装Redis6 安装依赖开始安装下载安装包解压安装包编译源代码修改配置文件 启动并连接启动redis服务器本地连接远程连接 下篇预告 安装依赖 首先我们是源码包安装我们需要安装C语言编译器,顺便下载wget: yum install -y gcc wget开始安装…

Git 基本原理和常用操作

Git Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程:工作区 -> git add 到暂存区 -> gi…

静态路由——实现两个不相连的网段通信实验

路漫漫其修远兮,吾将上下而求索 今天做一个简单的实现两个不相连的网段通信实验,本实验使用静态路由配置,主要 加强初学者对静态路由的理解。 实际中不可能只使用静态路由,还要使用诸多的其他网络协议,达到安全可靠的…

Gin学习记录3——模版与渲染

模版与渲染 一. 返回二. 模版2.1 基础模版2.2 同名模版2.3 模版继承2.4 模版语法 一. 返回 如果只是想返回数据,可以使用以下函数: func (c *Context) JSON(code int, obj any) func (c *Context) JSONP(code int, obj any) func (c *Context) String(…

SpringBoot集成WebSocket

SpringBoot集成WebSocket 项目结构图 项目架构图 前端项目 socket.js 注意前端这里的端口是9000, 路劲是ws开头 function createScoket(token){var socket;if(typeof(WebSocket) "undefined") {console.log("您的浏览器不支持WebSocket");}else{var ho…

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤 本教程详细介绍了如何在Ubuntu操作系统上安装CUDA(NVIDIA的并行计算平台)和cuDNN(深度神经网络库),以及如何验证安装是否成功。通过按照这些步骤操作,您将能够…

知识储备--基础算法篇-矩阵

2.矩阵 2.1第54题螺旋矩阵 第一题上来就跪了,看了官方答案感觉不是很好理解,找了一个比较容易理解的。 class Solution(object):def spiralOrder(self, matrix):""":type matrix: List[List[int]]:rtype: List[int]"""…

微服务之架构演变

随着互联网的发展,网站应用规模不断扩大,网站架构随之不断演变,演变历史大致分为单体应用架构-垂直应用架构-分布式架构-SOA架构-微服务架构-云原生架构 架构演变 单体应用架构 以前网站流量小,只需要一个应用就可以把所有功能…

理解FPGA中的亚稳态

一、前言 大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助…

某物联网数智化园区行业基于 KubeSphere 的云原生实践

公司简介 作为物联网 数智化园区一体化解决方案提供商,我们致力于为大中型园区、停车场提供软硬件平台,帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线,使用 spug(一款轻量级无 Agent 的自…

书单制作方法详细步骤,需要的小伙伴快来看看~

随着网络的发展,视频已经成为了人们获取信息的主要途径之一。书单视频作为一种特殊类型的视频,既能为观众提供阅读建议,又能为制作者带来收益,因此备受欢迎。本文将分享书单视频制作的详细步骤,帮助有兴趣的朋友们快速…