首页
学习
活动
专区
工具
TVP
发布

linux进程内存布局

BSS段属于静态内存分配。 数据段:在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。...代码段:在采用段式内存管理的架构中,代码段(text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域属于只读。...堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。...当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) 栈 (stack):栈又称堆栈, 是用户存放程序临时创建的局部变量...除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以 栈特别方便用来保存/恢复调用现场。

3K41
您找到你想要的搜索结果了吗?
是的
没有找到

Linux进程通信——共享内存

共享内存 原理与概念 两个进程的PCB创建虚拟地址空间然后映射到物理内存中,每个进程因为是独立的,所以在物理内存中的地址也不同。 那么共享内存是怎么做到的呢?...首先先在物理内存中申请一块内存。 然后讲这块内存通过页表映射分别映射到这两个进程的虚拟地址空间内,让这两个进程都能看到这块内存。...所以:共享内存 = 物理内存快 + 共享内存的相关属性 OS管理的是对这个共享内存的数据结构对象做管理的。 那么在创建共享内存的时候,如何保证共享内存在OS中是唯一的呢?答案就是key。...void* attachshm(int shmid) { void* p = shmat(shmid, nullptr, 0); if((long long)p == -1L)//因为linux...那么显示这块内存的数据结构是4097的大小,但是实际物理内存以你为是按照每次最少开辟4KB大小算的(内存划分内存块的基本单位),所以一般都是开辟4KB的整数倍,这里显示是4097只是因为他是数据结构,实际上多出了

5.3K30

Linux进程内存管理(二)

简单记录一下内存管理器的基本原理。这里就不深入代码内部了。 内存管理器的初始化 进程启动后,在 jemalloc 载入的时候会调用 jemalloc_constructor 执行一些初始化操作。...arena : 将内存切分成多个类别的固定大小,采用内存池的方式对内存区域进行管理,降低内存碎片。 system memory : 其实就是内核管理的内存区域。...相关系统调用 接下来,介绍一下内存分配器相关的系统调用: brk/sbrk mmap 在介绍这几个系统调用之前,需要先对进程内存布局有所认识。 ?...64位进程内存布局 上图是一个 Linux 64位进程的地址空间布局的简图,jemalloc 能管理的就是 Heap 和 Memory map 两块的内存。 Text,存储程序的二进制代码。...参考文档 jemalloc Linux manpage jemalloc源码解析-内存管理

2.8K40

Linux进程内存管理

mm_struct结构描述了一个进程的整个虚拟地址空间,vm_area_truct描述了虚拟地址空间的一个区间(简称虚拟区)。...下图就是我们所说的由task_struct到mm_struct,进程的地址空间的分布。 ? 每一个进程都会有自己独立的mm_struct,这样每一个进程都会有自己独立的地址空间,这样才能互不干扰。...当进程之间的地址空间被共享的时候,我们可以理解为这个时候是多个进程使用一份地址空间,这就是线程。...arg_start,结束arg_end,环境段的开始env_start,结束env_end unsigned long saved_auxv[AT_VECTOR_SIZE]; struct linux_binfmt...vm_area_struct 数据结构来管理,包括虚拟内存的起始和结束地址,以及内存的访问权限等,通常命名为vma;vm_area_struct 数据结构的定义如下: ?

3.2K20

kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)

虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配. 该机制通常用于用户过程, 内核自身会试图尽力避免非连续的物理地址。...它与通过固定公式与物理内存关联的直接映射页相反,虚拟固定映射地址与物理内存位置之间的关联可以自行定义,关联建立后内核总是会注意到的. ?...他们定义在tools/virtio/linux/kernel.h?v=4.7, line 46 这两个函数返回一个指向内存块的指针, 其内存块至少要有size大小. 所分配的内存区在物理上是连续的....分配器还可以在返回内存之前, 在队列上等待一个事件(相关进程会进入睡眠状态)....它限制只在分配到当前进程的各个CPU所关联的结点分配内存。如果进程允许在所有CPU上运行(默认情况),该标志是无意义的。

6.3K21

如何查看linux系统中空闲内存物理内存使用剩余内存

查看linux系统中空闲内存/物理内存使用/剩余内存 查看系统内存有很多方法,但主要的是用top命令和free 命令 当执行top命令看到结果,要怎么看呢?...= 总物理内存 - 实际已用内存  应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存 top命令的结果详解 top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况...时间总计,单位秒   m  TIME+  进程使用的CPU时间总计,单位1/100秒   n  %MEM  进程使用的物理内存 百分比   o  VIRT  进程使用的虚拟内存总量,单位kb。...VIRT=SWAP+RES   p  SWAP  进程使用的虚拟内存中,被换出的大小,单位kb。   q  RES  进程使用的、未被换出的物理内存大小,单位kb。...测量一个进程占用了多少内存linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

19.6K41

linux进程进程间通信_linux共享内存进程间通信

内存共享最新整理: Linux进程间通信-共享内存 – 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式 https://www.codecomeon.com/posts...两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。 进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。...二、相关函数: 与信号量一样,在Linux中也提供了一组函数接口用于使用共享内存,而且使用共享共存的接口还与信号量的非常相似,而且比使用信号量的接口来得简单。...共享内存的权限标志与文件的读写权限一样,举例来说,0644,它表示允许一个进程创建的共享内存内存创建者所拥有的进程向共享内存读取和写入数据,同时其他用户创建的进程只能读取共 享内存。...,已经很好了,我也就不在班门弄斧了: Linux共享内存编程实例_分享美好的专栏-CSDN博客_linux共享内存实例 赐教!

4.4K30

Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体...SPARSEMEM */ // 页描述数组 struct page *node_mem_map; #endif } 参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构

6.5K10

Linux进程通信之共享内存

Linux进程通信之共享存储 概念: 共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。...共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。...PHP中的封装: php中封装了shm开头的函数和shmop开头的函数,实际效果是一样的,具体使用方式请查看官方手册 ,下面我们以shm开头的为例演示 特点: 共享内存是将内存映射到其他进程的地址空间中...,所以说共享内存也是最快的IPC进程通信方式 前提: 在使用IPC进程通信时,也就是信号量、消息队列、共享存储时,首先要先确定自己的PHP扩展是否已经开启,使用php -m 查看 编写代码 父子进程...,至于非血缘关系的通信,则看我之前的文章,自己实现即可 当然,IPC进程间的通信数据也会保存在Linux系统中,可通过下面的方式,具体查看相关信息 并且如果想知道系统调用的哪些底层函数,则可以用

4.6K31

Linux进程内存分析pmap命令

名称:        pmap - report memory map of a process(查看进程内存映像信息)pmap命令用于报告进程内存映射关系,是Linux调试及运维一个很好的工具。...映像支持文件,[anon]为已分配内存 [stack]为程序堆栈         Offset:  offset into the file  文件偏移         Device:  device...,也就是该进程预先分配的虚拟内存大小,即ps出的vsz writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小       shared 表示进程和其他进程共享的内存大小...查看进程1的设备格式,不显示头尾行 [root@C44 ~]#  pmap -d -q 1 1:   init [5]                     00934000     ...00000   [ stack ] ffffe000       4 ----- 0000000000000000 000:00000   [ anon ] [root@C44 ~]#   查看进程

3.4K10

Linux进程间通信【共享内存

:在物理内存中开辟一块公共区域,让两个不同的进程的虚拟地址同时对此空间建立映射关系,此时两个独立的进程能看到同一块空间,可以直接对此空间进行【写入或读取】,这块公共区域就是 共享内存 显然,共享内存的目的也是...,实际中会使用函数进行自动释放,因为手动释放比较麻烦 2.4、进程关联 shmat 共享内存在被成功创建后,进程还不 “认识” 它,只有让待通信进程都 “认识” 同一个共享内存后,才能进行正常通信,让进程...id 参数2 const void *shmaddr 共享内存关联至进程共享区的地址,可以不用管 参数3 int shmflg 关联后,进程对共享内存的读写属性 当进程与共享内存关联后,返回的就是共享内存映射至共享区的起始地址...: 进程 A 直接将数据写入共享内存进程 B 直接从共享内存中读取数据 显然,使用共享内存只需要经过 2 次 IO 所以共享内存的秘籍是 减少拷贝(IO)次数 得益于共享内存的这种特性,可以让进程通信的时候...》 ---- 总结 以上就是本次关于 Linux 进程间通信之 共享内存 的全部内容了,共享内存 是所有 IPC 中最快的一种,因为它省去了很多不必要的 IO 操作,进程直接对话进程,效率极高,不过在狂飙的后果就是不安全

21500

Linux进程内存消耗指标解读

了解系统的内存消耗是运维最基本的技能,但是Linux中关于内存消耗的指标很容易让人混淆,本文尝试把诸多概念解释清楚 概念 物理内存和虚拟内存 物理内存:不解释 虚拟内存进程独享,由操作系统通过地址映射的方式...在32位Linux机器上,每个进程的虚拟内存都是4G。...Set Size 进程独自占用的物理内存(不包含共享库占用的内存) TOP命令 top - 21:58:44 up 4:45, 3 users, load average: 2.57, 1.72...RES(Resident set size) - 实际使用的物理内存(包含共享库占用的内存),与RSS相同 SHR - 与其他进程共享的内存 PS命令 $ ps aux | head USER...Linux 查看进程消耗内存情况总结 Java 进程占用 VIRT 虚拟内存超高的问题 Virtual Memory Usage from Java under Linux, too much memory

5.8K40

物理内存管理

前言: 书接上回《内存映射技术分析》,继续来分析一下linux物理内存管理。 分析: 1,物理内存 PC上的内存条,或者手机上的内存芯片,物理上实实在在的内存,就是物理内存。...所以kernel把高于896M的物理内存标记为High Memory Zone,访问High Memory Zone的内存就不能使用固定映射了,需要动态映射。...如果低于watermark了,说明系统内存不太多了,要适当回收。 6,buddy system Linux内存管理的核心算法,就是“伙伴系统”。...这里需要说明一下,对于Linux来说,一般都不需要连续的内存,因为系统跑起来之后,CPU在protected mode下访问的是虚拟地址,MMU把不连续的物理地址映射成连续的虚拟地址就可以了。...10,sparse mem 物理内存上,如果存在巨大的hole,可以考虑使用sparse mem。

2.6K70
领券