当前位置: 首页 > article >正文

< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学

1. 程序地址空间回顾C语言阶段学习过程序地址空间长这样代码段数据段这些是常量区栈区堆区还有一些系统需要的空间这些是内存吗 ——不是内存。这些都是虚拟地址空间OS给我们画的大饼整齐排列的虚拟地址 - 通过页表映射物理地址 - 存放在零散的物理内存中实际上的物理内存中不存在那么多分区各种数据都是零散存放的虚拟地址的意义之一就是管理内存碎片2. 通过C代码展示虚拟地址排布感受虚拟内存#include stdio.h #include unistd.h #include stdlib.h int g_unval; int g_val 100; int main(int argc, char *argv[], char *env[]) { const char *str helloworld; printf(code addr: %p\n, main); printf(init global addr: %p\n, g_val); printf(uninit global addr: %p\n, g_unval); static int test 10; char *heap_mem (char*)malloc(10); char *heap_mem1 (char*)malloc(10); char *heap_mem2 (char*)malloc(10); char *heap_mem3 (char*)malloc(10); printf(heap addr: %p\n, heap_mem); //heap_mem(0), heap_mem(1) printf(heap addr: %p\n, heap_mem1); //heap_mem(0), heap_mem(1) printf(heap addr: %p\n, heap_mem2); //heap_mem(0), heap_mem(1) printf(heap addr: %p\n, heap_mem3); //heap_mem(0), heap_mem(1) printf(test static addr: %p\n, test); //heap_mem(0), heap_mem(1) printf(stack addr: %p\n, heap_mem); //heap_mem(0), heap_mem(1) printf(stack addr: %p\n, heap_mem1); //heap_mem(0), heap_mem(1) printf(stack addr: %p\n, heap_mem2); //heap_mem(0), heap_mem(1) printf(stack addr: %p\n, heap_mem3); //heap_mem(0), heap_mem(1) printf(read only string addr: %p\n, str); for(int i 0 ; i argc; i) { printf(argv[%d]: %p\n, i, argv[i]); } for(int i 0; env[i]; i) { printf(env[%d]: %p\n, i, env[i]); } return 0; }通过打印对应变量的地址感受每种变量在内存的排布3. 一个id两个值地址相同 - 虚拟地址地址一样但是两个值绝对不是物理地址。而是虚拟地址空间4. 虚拟地址空间详细图解一、进程虚拟内存空间划分从代码到地址布局代码与数据地址观测​通过打印变量地址如全局变量、堆、栈、常量等可观察到代码段code addr、初始化全局init global、未初始化全局unit global地址接近属于代码/数据区。堆heap addr地址递增符合“堆向上生长”栈stack addr地址递减符合“栈向下生长”。命令行参数argv、环境变量env位于栈附近属于栈区附属区域。虚拟地址空间的本质​程序运行即进程进程存在则虚拟地址空间必然存在。OS 通过规划虚拟地址空间而非直接操作物理内存将代码、数据、堆、栈等分区管理再映射到物理内存。二、页表与地址转换MMU 的角色页表的作用​虚拟地址 → 物理地址的转换由MMU内存管理单元CPU 内置硬件​ 完成。页表存储虚拟地址到物理地址的映射关系CPU 只负责读取虚拟地址交给 MMU 转换过程对软件透明。页表的细节​惰性分配进程malloc时仅分配虚拟地址空间物理内存延迟到“读/写”时才会创建映射避免空占物理内存。权限标志如r/w/x页表项标记内存区域的权限只读、可写、可执行若违规操作如写只读页内核会终止进程。三、虚拟地址空间的意义为何需要虚拟内存管理内存碎片虚拟地址将零散的物理内存“拼接”成连续的地址空间便于统一管理。保护内存安全进程仅操作虚拟地址内核通过页表隔离不同进程的内存防止越权访问。解耦进程与内存模块进程关心虚拟地址内核关心页表映射降低模块耦合。支持大内存与并发通过“惰性分配 swap 扩展”进程可使用远超物理内存的虚拟空间提升并发能力。四、VMA虚拟内存区域与 mm_struct内存描述符mm_struct进程的“虚拟地址空间总控”​每个进程对应一个mm_struct记录虚拟地址空间的全局信息如代码段、数据段、堆、栈的起始/结束地址总内存大小等。VMA虚拟地址的“分段管理器”​堆、栈反复创建销毁会导致虚拟地址空间“零散”mm_struct的简单start/end无法表示所有碎片。因此引入vm_area_structVMA每个 VMA 描述一段连续的虚拟内存区域含权限、起始/结束地址。多个 VMA 通过链表mmap串联覆盖所有零散空间。VMA 回指 mm_structvm_mm的意义​VMA 通过vm_mm指针回指所属进程的mm_struct让局部内存区域能反向定位全局上下文如缺页异常时通过 VMA→mm_struct 找到页表修复映射。五、写时拷贝COW与进程创建子进程通过fork创建时默认共享父进程的物理内存浅拷贝仅复制页表。若父子进程尝试“写”操作触发写时拷贝内核为写操作分配新物理内存复制数据后修改页表保证进程间内存独立。六、虚拟内存空间的最终框架结构关系进程控制块task_struct→ 包含mm_struct虚拟地址空间总控→mm_struct包含vm_area_structVMA 链表。各 VMA 对应虚拟地址空间的不同区域代码、数据、堆、栈、文件映射等通过vm_mm关联mm_struct形成“进程-虚拟空间-物理内存”的完整映射链。

相关文章:

< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学

1. 程序地址空间回顾C语言阶段学习过程序地址空间,长这样代码段,数据段:这些是常量区,栈区,堆区,还有一些系统需要的空间这些是内存吗? ——不是内存。这些都是虚拟地址空间,OS给我们…...

解锁QQ音乐加密音频:QMCDecode让macOS用户重获音乐自由

解锁QQ音乐加密音频:QMCDecode让macOS用户重获音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认…...

PCF8591模数转换器实战指南:从I2C通信到多通道数据采集

1. 项目概述:为什么你需要一个PCF8591?在嵌入式开发和电子制作的世界里,我们常常需要处理一个核心矛盾:我们的大脑和代码生活在离散的数字世界(0和1),但我们身处的物理世界却是一个充满连续变化…...

2026年5月权威实测:Claude Code必装的7个MCP,效率翻倍

Top 1:GitHub MCP —— “衔枚之钉” 如果说MCP服务器里只能留下一个,那GitHub MCP绝对是不可动摇的“钉子户”。它不仅是每个开发者工作流的起点,更是将AI代理从“代码提示者”推向“自主开发者”的核心动力。 它的核心价值是**“端到端的工…...

电机选型与控制实战指南:从直流、步进到伺服电机

1. 电机选型:从理解需求开始选电机,听起来像是硬件工程师或者资深创客的活儿,但只要你玩过Arduino小车、做过3D打印机,或者想给家里的模型加个能动的部件,这事儿就绕不开。我刚开始接触项目时,也犯过迷糊&a…...

Adafruit IO Feeds:物联网数据流管理的核心枢纽与实战指南

1. 项目概述:为什么Feeds是物联网项目的“数据心脏”如果你正在玩转物联网项目,无论是用ESP32做个家庭气象站,还是用树莓派监控植物生长,最终都会遇到一个核心问题:数据往哪存,怎么管?传感器读数…...

CircuitPython开发实战:串口通信与编辑器配置全攻略

1. 项目概述与核心价值 如果你刚开始接触CircuitPython,或者从Arduino这类环境转过来,可能会觉得有点懵:代码写好了,怎么看到板子的输出?板子报错了,怎么知道错在哪里?为什么我的代码文件一保存…...

终极Cookie本地导出指南:如何安全获取cookies.txt文件

终极Cookie本地导出指南:如何安全获取cookies.txt文件 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发、API测试和自动化脚本…...

《QGIS空间数据处理与高级制图》011:SHP 批量转 GPKG(单文件夹 / 递归多文件夹)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

思源宋体TTF中文版:7款字重一键解锁专业中文排版

思源宋体TTF中文版:7款字重一键解锁专业中文排版 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的免费字体而烦恼吗?Source Han …...

算法联盟·全域数学公理体系下黑洞标量毛发与LVK引力波O4全维理论、求导、证明、计算、验证、分析

算法联盟全域数学公理体系下黑洞标量毛发与LVK引力波O4全维理论、求导、证明、计算、验证、分析 算法联盟 全域数学公理体系下黑洞标量毛发与 LVK 引力波O4 全维理论、求导、证明、计算、验证、分析 所属体系:算法联盟 ROOT 全域数学网格第一性原理(AI科…...

Android 数字人动画序列帧选型优化:PNG vs WebP 格式深度对比实践

一、项目背景近期开发遇到数字人动画落地优化需求,业务流程为:单张人物原图 → 生成数字人短视频 → 导出带 Alpha 透明通道的序列帧,最终需要在 Android 页面中流畅播放数字人序列帧动画。整个流程核心难点:选择合适的透明序列帧…...

大模型小白入门指南:3分钟读懂核心逻辑+高性价比产品推荐(建议收藏+转发)

大模型小白入门指南:3分钟读懂核心逻辑高性价比产品推荐(建议收藏转发) 本文通俗易懂地拆解了大众对大模型的三个常见误区,如“大模型高级聊天机器人”、“大模型会说谎”、“AI会取代人类”。通过比喻方式解释了大语言模型和多模…...

如何摆脱游戏卡顿困扰:DLSS Swapper的智能性能管理方案

如何摆脱游戏卡顿困扰:DLSS Swapper的智能性能管理方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 当我们沉浸在《赛博朋克2077》的夜之城,或是探索《艾尔登法环》的交界地时,突…...

终极英雄联盟自动BP与战绩查询工具:Seraphine完全指南

终极英雄联盟自动BP与战绩查询工具:Seraphine完全指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否曾在排位赛中因手动查询对手战绩而手忙脚乱?是否因为错过接受对局而懊恼不…...

实战解析:XiaoMusic技术架构深度剖析与智能音箱语音控制实现方案

实战解析:XiaoMusic技术架构深度剖析与智能音箱语音控制实现方案 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 在智能音箱生态中,小爱音箱…...

驾驶舱前端设计方案:从“花架子”到“真能用”的组件化实战

很多人一提起“驾驶舱”或“ dashboard ”,脑海里浮现的就是:满屏图表、深色背景、会转动的3D地球、还有一堆看起来很高端但没人点开的按钮。但真正在一线做过驾驶舱的人都知道——大部分驾驶舱,上线当天截个图发朋友圈之后,就再也…...

日常记录:SQL学习总结

一、什么是SQL注入SQL注入,就是通过把恶意SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器使数据库执行恶意SQL命令目的的入侵行为。关键:闭合原有 SQL 语句,构造恶意新语句。二、SQL注入漏洞分类三…...

生物记录仪能耗优化:机器学习与传感器融合实践

1. 生物记录仪能耗挑战与机器学习解决方案在野生动物行为研究领域,生物记录仪(bio-logger)已成为不可或缺的工具。这些小型电子设备通常搭载多种传感器,如加速度计、陀螺仪和磁力计等,用于记录动物的运动轨迹和行为模式。然而,这类…...

SwarmVault:去中心化AI数据存储与管理的实践指南

1. 项目概述与核心价值最近在探索分布式存储和AI应用结合的前沿领域时,我遇到了一个非常有意思的项目:swarmclawai/swarmvault。这个名字本身就透露了它的野心——将去中心化存储网络Swarm与人工智能(AI)能力相结合,构…...

3分钟解决Windows热键冲突:Hotkey Detective让你重掌键盘控制权

3分钟解决Windows热键冲突:Hotkey Detective让你重掌键盘控制权 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective …...

AKTools深度解析:3分钟构建跨语言金融数据API的实战指南

AKTools深度解析:3分钟构建跨语言金融数据API的实战指南 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools是一款为AKShare开源…...

【信息科学与工程学】【通信工程】第一百二十二篇 数字通信函数01

数字通信算法/函数库 函数编号:​ F001 函数名称:​ qpsk_modulator 类型:​ 调制 (Modulation) 通信分析:​ 该函数实现经典的正交相移键控调制,将输入的二进制比特流映射为复数符号(IQ数据)。它是数字通信发射机的基础模块,将数字信息加载到载波相位上,具有恒包络特…...

Revelation光影包:5分钟打造电影级Minecraft视觉体验

Revelation光影包:5分钟打造电影级Minecraft视觉体验 【免费下载链接】Revelation An explorative shaderpack for Minecraft: Java Edition 项目地址: https://gitcode.com/gh_mirrors/re/Revelation 想让你的Minecraft方块世界瞬间拥有电影大片般的视觉效果…...

Midjourney Pro订阅值不值得?深度拆解12项独家能力与企业级工作流增效实测数据

更多请点击: https://intelliparadigm.com 第一章:Midjourney Pro订阅的核心价值定位 Midjourney Pro 并非简单的“更高额度”升级包,而是面向专业创作者与团队工作流重构的关键基础设施。其核心价值体现在稳定性、可控性与协同效率三个不可…...

MTEB 排行榜之外:嵌入模型在 JRXML 场景下的选择逻辑

前文引用:通用分块器搞不定 JRXML:一个领域感知分块器的三层设计 分块之后,每一段文本需要转成一个向量,才能存进向量数据库做相似度检索。这个"文本 → 向量"的函数就是文本嵌入模型(Embedding Model&#…...

【Langchain】 ChatPromptTemplate:从“手动拼字符串“到“专业模板“的进化之路

零基础看懂 ChatPromptTemplate:从"手动拼字符串"到"专业模板"的进化之路一句话总结:ChatPromptTemplate 是 LangChain 中专门用来组装聊天消息的"模板引擎",它能让你像填空题一样,把变量插进预设的…...

LizzieYzy:围棋AI分析的终极免费工具,5分钟快速上手

LizzieYzy:围棋AI分析的终极免费工具,5分钟快速上手 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 围棋AI分析、免费围棋助手、LizzieYzy快速入门、围棋复盘工具、AI棋力提…...

基于SDR与FPGA的全栈开源Wi-Fi设计:openwifi架构解析与实战

1. 项目概述:当Wi-Fi遇见SDR,一个开源全栈无线设计的诞生如果你和我一样,在无线通信领域摸爬滚打多年,从研究协议栈到调试硬件驱动,总会遇到一个痛点:商用Wi-Fi芯片就像一个黑盒子。你能用iwconfig配置它&a…...

百度网盘直链解析终极指南:5分钟告别限速下载的完整教程

百度网盘直链解析终极指南:5分钟告别限速下载的完整教程 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那令人崩溃的下载速度而烦恼吗?…...