0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从进程的角度看内存

麦辣鸡腿堡 来源:TrustZone 作者:TrustZone 2023-10-30 18:02 次阅读

在windows下的可执行文件的格式为.exe,而Linux的下的是ELF。这是一种文件格式,就是告诉你文件是怎么存储的。

整个ELF的图看看

图片

这些内容和内核空间定义也差不多。

代码段(.text):程序源代码编译后的机器指令被存放在这个代码段里。

数据段(.data):存放已初始化的全局变量和已初始化的局部静态变量。

bss段(.bss):用来存放未初始化的全局变量以及未初始化的局部静态变量。

写一个程序,其实是依赖很多的其他的程序,因此自己写的程序需要编译链接后才能使用。

时起到辅助作用,暂时先不用关注它们。程序在编译链接时会尽量把相同权限属性的段分配在同一个空间里,例如,把可读可执行的段放在一起,包括代码段、init段等;把可读可写的段放在一起,包括.data段和.bss段等。ELF把这些属性相似并且链接在一起的段叫作分段(Segment),进程在装载时是按照这些分段来映射可执行文件的。

描述这些分段的结构叫作程序头(Program Header),它描述了ELF文件是如何映射到进程地址空间的,这是我们比较关心的。

可以使用objdump或者readelf工具来查看ELF文件包含哪些段。

我们可以通过“readelf -l”命令来查看这些程序头。

在看的时候主要关注LOAD类型的分段,其他的都是在LOAD的时候起到辅助作用。

这是都是静态的。

在如果你想去看看静态的,可以通过proc文件系统来看看Linux内核的运行情况。每个进程运行之后,在/proc/pid/maps节点会列出当前进程的地址映射情况。

图片

第1行中显示了地址0x10000~0x870000这段进程地址空间,它的属性是只读并且可执行的,由此我们知道它是代码段,也就是之前看到的代码段的程序头。

第2行中显示了地址0x96000~0x98000,它的属性是可读可写的进程地址空间,也就是我们之前看到的数据段的程序头。

第 3 行中显示了地址0x98000~0xbb000,这段进程地址空间叫作堆空间(Heap),也就是通常使用malloc分配的内存,大小是140KB。test进程主要使用malloc分配100KB的内存,这里看到Linux内核会分配比100KB稍微大一点的内存空间。

第4行显示test进程的栈(stack)空间。

第5行是Sigpage的进程地址空间,Sigpage是ARM体系结构中特有的页面。

第6行是ARM中高端映射的异常向量(vectors)。

这里说的进程地址空间,在 Linux 内核中使用一个叫作 VMA的术语来描述,它是vm_area_struct数据结构的简称,在虚拟内存管理部分会详细介绍它。另外,/proc/pid/smaps节点会提供更多的地址映射的细节,以代码段的VMA和堆的VMA为例。

另外,/proc/pid/smaps节点会提供更多的地址映射的细节,以代码段的VMA和堆的VMA为例。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1372

    浏览量

    40288
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209431
  • 内存
    +关注

    关注

    8

    文章

    3023

    浏览量

    74033
  • 代码
    +关注

    关注

    30

    文章

    4786

    浏览量

    68568
收藏 人收藏

    评论

    相关推荐

    Linux 内核的角度谈线程栈和进程

    虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护,并被处理器的内存管理单元(MMU)硬件引用。 每个进程都拥有一套属于它自己的页表,因此对于每个进程而言都好像
    的头像 发表于 09-25 15:23 2486次阅读
    <b class='flag-5'>从</b> Linux 内核的<b class='flag-5'>角度</b>谈线程栈和<b class='flag-5'>进程</b>栈

    如何EMI角度PCB layout 法规

    ` 如何EMI角度PCB layout 法规如何從EMI角度PCB Layout 法則有以下幾個重點Point 1: 先了解導線或傳輸線的幅射或天線效應 對應國際法規EMI幅射量
    发表于 02-19 18:36

    Linux上对进程进行内存分析和内存泄漏定位

    。(栈)5、采用mmap方式映射到虚拟地址空间中的内存段这是我的机器上,redis 进程的情况,第一行:r-xp可知其权限为只读、可执行,该段内存地址对应于执行文件的代码段,程序的代
    发表于 07-09 08:15

    架构的角度如何写好代码 + 我的思考

    架构漫谈(八):架构的角度如何写好代码 + 我的思考
    发表于 06-18 06:16

    如何安全的角度自动驾驶

    安全的角度自动驾驶
    发表于 01-25 06:42

    步进电机驱动IC的角度步进电机

    步进电机驱动IC的角度步进电机,归纳相关知识点。一、单极性与双极性电机: 单极性电机,由单极性IC驱动。其一端接Vcc,另一端由IC控制连接或断开。 而双极性电机,由双极性IC驱动。双端都由IC控制。二、单极性电机的内部结构
    发表于 08-31 06:31

    进程间通信之共享内存

    8.5.1 共享内存概述 可以说,共享内存是一种最为高效的进程间通信方式。因为进程可以直接读写内存,不需要任何数据的复制。为了在多个
    发表于 10-18 16:08 1次下载
    <b class='flag-5'>进程</b>间通信之共享<b class='flag-5'>内存</b>

    纯粹软件威廉希尔官方网站 的角度Windows CE

    纯粹软件威廉希尔官方网站 的角度Windows CE,则可以说Windows CE就是嵌入式的Windows,虽然Windows CE不是微软唯一的一款嵌入式操作系统产品,但无疑是最有代表性的一款。在纯粹威廉希尔官方网站 的方面,Windows CE和
    的头像 发表于 09-30 09:43 2556次阅读
    <b class='flag-5'>从</b>纯粹软件威廉希尔官方网站
的<b class='flag-5'>角度</b><b class='flag-5'>看</b>Windows CE

    编译原理的角度C语言如何转换成汇编语言的?

    编译原理的角度C语言是如何转换成汇编语言的?
    的头像 发表于 02-25 15:52 2649次阅读
    <b class='flag-5'>从</b>编译原理的<b class='flag-5'>角度</b><b class='flag-5'>看</b>C语言如何转换成汇编语言的?

    进程虚拟内存布局以及进程的虚拟内存分配释放流程,涉及的代码

    我们计划通过一系列文章来介绍虚拟内存分配/释放,缺页处理,内存压缩/回收,内存分配器等知识,梳理虚拟内存的管理。本章节结合代码介绍进程虚拟
    的头像 发表于 06-28 09:38 4118次阅读

    鸿蒙内核源码分析:进程是内核的资源管理单元

    系统的角度进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源,并独立于其
    发表于 11-24 17:52 23次下载
    鸿蒙内核源码分析:<b class='flag-5'>进程</b>是内核的资源管理单元

    SMT焊接角度BGA封装的优势

    smt焊接的角度,BGA芯片的贴装公差为0.3mm,比以往的QFP芯片的贴装精度要求0.08mm要低得多。一般来讲在小拇指大小甚至更小的空间上做SMT贴片打样贴装,那么更大的贴装公差就意味着更高的可靠性和贴装精度。
    的头像 发表于 07-11 10:47 558次阅读

    摩托车怎么就干不过小电驴了?线路板的角度差别

    摩托车怎么就干不过小电驴了?线路板的角度差别
    的头像 发表于 10-30 16:06 540次阅读

    软件角度看看内存

    关于内存软件的角度去查看,其实作为一个软件程序员,大多数对这个维度的接触还是蛮多的。linux中有个free命令,其就是查看系统内存的情况。 free命令的选项也比较简单,常用的参
    的头像 发表于 10-30 17:41 710次阅读
    <b class='flag-5'>从</b>软件<b class='flag-5'>角度</b>看看<b class='flag-5'>内存</b>

    线程、进程、多线程、多进程和多任务之间有何关系?

    进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。内核的观点进程的目的就是担当分配系统资源(CPU时间、内存
    的头像 发表于 01-11 13:39 359次阅读
    线程、<b class='flag-5'>进程</b>、多线程、多<b class='flag-5'>进程</b>和多任务之间有何关系?