cat /proc/maps 进程内存映射【转】

简介: 转自:http://blog.csdn.net/fisher_jiang/article/details/5063852 proc//maps查看进程的虚拟地址空间是如何使用的。该文件有6列,分别为:地址:库在进程里地址范围权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;偏移量:库...

转自:http://blog.csdn.net/fisher_jiang/article/details/5063852

proc/<PID>/maps
查看进程的虚拟地址空间是如何使用的。
该文件有6列,分别为:
地址:库在进程里地址范围
权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;
偏移量:库在进程里地址范围
设备:映像文件的主设备号和次设备号;
节点:映像文件的节点号;
路径: 映像文件的路径
每项都与一个vm_area_struct结构成员对应,
范例:
应用程序的正文段(权限为r-xp)从0x08048000到0x08049000,大小为4096;数据段从0x08049000到0x0804a000,大小为1KB。该应用程序使用了两个库:lib和libc。Libc 的正文段从0x00391000到0x004b4000,大小为1164KB;数据段从0x004b5000到0x004b8000,大小为12KB.
Ld 的正文段从00378000到0038d000,大小为84KB;数据段从0x0038e000到0x0038f000,大小为4KB。该应用程序所使用的库所占的虚拟空间的大小从0x4b8000到0x378000,大小为1280KB,其实真正大小为VmLib(1251KB);因为是按页分配,每页大小为4KB。

[root@localhost ~]# cat /proc/7114/maps
08047000-080dc000 r-xp 00000000 03:06 884901 /bin/bash
080dc000-080e3000 rwxp 00094000 03:06 884901 /bin/bash
080e3000-08129000 rwxp 080e3000 00:00 0 [heap]
4d575000-4d58a000 r-xp 00000000 03:06 736549 /lib/ld-2.3.4.so
4d58a000-4d58b000 r-xp 00015000 03:06 736549 /lib/ld-2.3.4.so
4d58b000-4d58c000 rwxp 00016000 03:06 736549 /lib/ld-2.3.4.so
4d58e000-4d6b1000 r-xp 00000000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b1000-4d6b2000 r-xp 00123000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b2000-4d6b5000 rwxp 00124000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b5000-4d6b7000 rwxp 4d6b5000 00:00 0
4d6de000-4d6e0000 r-xp 00000000 03:06 736552 /lib/libdl-2.3.4.so
4d6e0000-4d6e2000 rwxp 00001000 03:06 736552 /lib/libdl-2.3.4.so
4d807000-4d80a000 r-xp 00000000 03:06 736567 /lib/libtermcap.so.2.0.8
4d80a000-4d80b000 rwxp 00002000 03:06 736567 /lib/libtermcap.so.2.0.8
b7bf2000-b7c1e000 r-xp 00000000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c1e000-b7c20000 rwxp 0002b000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c20000-b7c26000 r-xs 00000000 03:06 881502 /usr/lib/gconv/gconv-modules.cache
b7c26000-b7d2f000 r-xp 02197000 03:06 852489 /usr/lib/locale/locale-archive
b7d2f000-b7f2f000 r-xp 00000000 03:06 852489 /usr/lib/locale/locale-archive
b7f2f000-b7f38000 r-xp 00000000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f38000-b7f3a000 rwxp 00008000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f3a000-b7f3c000 rwxp b7f3a000 00:00 0
b7f51000-b7f52000 rwxp b7f51000 00:00 0
bfc3d000-bfc52000 rw-p bfc3d000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
[root@localhost ~]#

参数 解释
address: 0085d000-00872000 虚拟内存区域的起始和终止地址文件所占的地址空间
perms:rw-p 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
offset: 00000000 虚拟内存区域在被映射文件中的偏移量
dev: 03:08 文件的主设备号和次设备号
inode: 设备的节点号,0表示没有节点与内存相对应
name: /lib/ld-2.3.4.so 被映射文件的文件名

各共享库的代码段,存放着二进制可执行的机器指令,是由kernel把该库ELF文件的代码段map到虚存空间;
各共享库的数据段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;
用户代码段,存放着二进制形式的可执行的机器指令,是由kernel把ELF文件的代码段map到虚存空间;
用户数据段之上是代码段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;
用户数据段之下是堆(heap),当且仅当malloc调用时存在,是由kernel把匿名内存map到虚存空间,堆则在程序中没有调用malloc的情况下不存在;
用户数据段之下是栈(stack),作为进程的临时数据区,是由kernel把匿名内存map到虚存空间,栈空间的增长方向是从高地址到低地址。

【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
2月前
|
人工智能 JSON API
AI Agent 完全入门:从“大模型”到“能干活”的智能体,一篇讲透
本文深入浅出解析AI Agent本质:非 merely 工具调用,而是“感知-规划-记忆-工具”四层闭环的行动系统。对比普通大模型“只生成答案”,Agent能自主拆解目标、多步执行任务。聚焦测试场景,详解其在自动生成数据、UI自愈、智能断言三大落地点的实效价值。
|
4月前
|
JavaScript 前端开发 UED
前端组件库——Arco Design Vue知识点大全(二)
教程来源 https://bncne.cn/sheyinggoutu.html Arco Design Vue提供丰富UI组件(按钮、栅格、表单、表格、反馈)及强大主题定制能力:支持Less编译时覆盖(如`arcoblue-6`主色生成10阶色板)与CSS变量运行时动态换肤,兼顾开发效率与用户体验。
|
4月前
|
SQL 算法 关系型数据库
吃透 MySQL Join 底层:3 种关联算法的执行原理、适用场景与极致优化方案
本文深入解析MySQL三大JOIN算法(NLJ、BNLJ、Hash Join)的底层原理与优化实践,厘清驱动表选择、索引依赖、执行计划等关键误区,结合实战案例与代码实现,助开发者从根本上解决80%的慢JOIN问题。
485 2
|
5月前
|
人工智能 开发者
天啊!政府开始"养龙虾"了!一人公司真的要来了!
深圳龙岗、无锡高新区推出“养龙虾”新政——“龙虾十条”“龙虾十二条”,聚焦OpenClaw智能体生态,首创补贴“一人公司”(OPC)与开源开发者,提供应用券、零房租、生活补贴及合规服务,推动AI战略从要素驱动迈向生态与制度驱动的智能体经济新范式。(239字)
317 2
|
7月前
|
人工智能 安全 架构师
AI Agent 职业路线体系化指南:从入门到专家的进阶框架与赛道布局
2026年,AI Agent已成企业核心生产力。本文系统梳理三大职业方向:架构师(多智能体系统设计)、行业调教专家(RAG+垂直Know-how)、运营与安全官(可信与合规保障),并给出0-5年进阶路径与窗口期机遇,助开发者构建不可替代的职业护城河。(239字)
810 4
|
8月前
|
机器学习/深度学习 JSON 文字识别
还在研究部署PaddleOCR?数眼智能OCR文档解析API上线:免费使用!
数眼智能推出新一代OCR文档解析API,突破传统OCR局限,融合多模态识别与深度学习,精准还原PDF、扫描件中的文字、表格、公式等结构,直接输出带层级的Markdown与JSON数据。实现标题、段落、表格自动分离,助力大模型知识库构建、金融报表分析、学术文献处理等场景,10秒内高效响应,让纸质文档秒变智能数据资产。
554 1
|
7月前
|
存储 人工智能 安全
区块链 Web3 项目开发
2026年区块链Web3进入“生产力时代”,强调实用、合规与AI融合。开发聚焦经济模型设计、联盟链/公链选型、智能合约安全及AI Agent集成,国内宜走产业赋能或技术出海路径,结合RWA、DID与去中心化存储,构建可持续生态。#区块链 #web3开发
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
2785 5
|
设计模式 网络协议 Java
11.多用组合和少继承
本文探讨了面向对象编程中“组合优于继承”的原则,通过多个案例分析了组合与继承的优劣。首先以绘图应用程序为例,展示了使用继承实现多形状时类数量激增的问题,而通过组合可以灵活地扩展功能。接着通过不同鸟类程序案例,揭示了复杂继承关系对代码可维护性和可读性的负面影响,并提出用接口和组合替代传统继承的设计思路。最后总结了组合与继承在实际开发中的适用场景及权衡点,强调应根据具体需求选择合适的设计方式,避免过度依赖继承或组合。文末还提供了丰富的学习资源链接,涵盖设计模式、Java进阶、网络协议等多个领域,适合开发者深入研究。
526 45