首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux下c程序内存映像

(2)内存有多种管理方法:栈、堆、数据段、bss段、.text段等,其实这个Linux环境可以查看以ELF结尾可执行程序,可以看到所说这些;一个变量存储类属性就是描述这个变量存储在何种内存段中。...(2)变量和内存关系,就和人(变量)去图书馆借书(内存)一样。变量生命周期就好象我人借书这段周期一样。 (3)研究变量生命周期可以我们理解程序运行一些现象、理解C语言一些规则。...Linux下c程序内存映像 - 代码段、只读数据段 - (1)对应着程序代码(函数),代码段在linux中又叫文本段(.text)。...C语言不会自动向堆中存放东西,堆操作是程序员自己手工操作程序员根据需求自己判断要不要使用堆内存,用时候自己申请(使用malloc函数),自己使用,完了自己释放(使用free函数释放掉)。...(2)对于linux每一个进程来说,它都以为整个系统中只有它自己和内核而已。它认为内存地址0xC0000000以下都是它自己活动空间,0xC0000000以上是OS内核活动空间。

3K20

理解linux平台上java程序内存模型

java 程序是运行在jvm 虚拟机里面的,离开jvm虚拟机,那么java程序无法直接在linux平台运行。 所以java应用程序和os 平台之间是隔着jvm虚拟机。...我们更多需要从jvm作为java程序管理者角度来看其内存模型: 此时jvm内存空间可以分为两大类,分别是 “堆内存” 以及“非堆内存”,其中前者是可以分配给java程序使用,而后者则是jvm进程自己使用...jvm进程不仅仅提供了java程序运行环境,同时还进行 java 程序内存回收工作(也就是GC操作),程序员从而可以不用考虑内存回收,这个是jvm进程(也就是java虚拟机)来完成. B....而Linuxswap回收是具有滞后性,所以可能看到swap空间被大量使用. 同时会经历系统响应缓慢情况....,每个java线程 stack大小为1M, 所以java线程栈大小和线程数量多少有关,这部分内存不属于jvm管理内存 NIO大小,如果java 大量使用NIO, 这个值就会比较大,要通过监控工具查看其大小

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

    Linux 程序设计1:深入浅出 Linux 共享内存

    Linux 之中实现共享内存方式通常有如下几类: mmap内存共享映射 (通常用于父子进程之间内存共享,存在一定局限性,后文不表) System V共享内存 POSIX共享内存 我们平时讨论主要共享内存就是后面两者...共享内存本质上是对内存空间使用,同时也是 ipc 方式之一,所以我们可以使用对应 Linux 命令来查看对应共享内存使用: free 可以显示系统内存占用,共享内存内存占用会归类在 shared...共享内存使用状况 这里简单介绍一下,共享内存各个列所代表含义: key:共享内存key,后文会通过程序来解释 key 含义。 shmil:共享内存编号。...status:共享内存状态,显示“dest”表示共享内存段已经被删除,但是还有别的引用,共享内存是通过引用计数方式来决定生命周期,一旦程序应用内存地址计数为0,操作系统会回收对应内存资源。...所以说,在一个使用到共享内存程序之中,需要程序设定一个文件路径和一个项目的proj_id,来获取系统之中确定一段共享内存key。

    2.4K32

    Linux内存描述之高端内存--Linux内存管理(五)

    你能很方便取得内核数据和用户进程数据 1.3 应用程序线性地址和动态内存分配 应用程序能使用最大线性地址就是3G, 根据linux应用分区方法: -------------------------...e=56 所以, 低端内核和高端内存是内核概念, 跟应用程序没有直接关系. 如果Linux物理内存小于1G空间,通常内核把物理内存与其地址空间做了线性映射,也就是一一映射,这样可以提高访问速度。...每个进程都有其自身页面目录PGD,Linux将该目录指针存放在与进程对应内存结构task_struct.(struct mm_struct)mm->pgd中。...可以看出Linux系统中每个进程页面目录第二部分是相同,所以从进程角度来看,每个进程有4G字节虚拟空间, 较低3G字节是自己用户空间,最高1G字节则为与所有进程以及内核共享系统空间。...于是,从具体进程角度来看,每个进程可以拥有4G字节虚拟空间。 Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。

    12.4K23

    Linux - Linux内存管理

    为了解决内存紧缺问题,Linux引入了虚拟内存概念。为了解决快速存取,引入了缓存机制、交换机制等。...要深入了解Linux内存运行机制,需要知道下面提到几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多空闲物理内存。...---- 从应用层角度来看系统内存使用状态 从应用层角度来看,系统内存也就是Linux上运行应用程序可以使用内存大小,即free命令第三行“(-/+ buffers/cached)”输出。...当应用程序需要用到内存时候,buffers/cache会很快地被回收,以供应用程序使用。...---- 缓冲区(buffer)与缓存(cache)异同 在Linux操作系统中,当应用程序需要读取文件中数据时,操作系统先分配一些内存,将数据从磁盘读入这些内存中,然后再将数据分发给应用程序;当需要往文件中写入数据时

    52.3K41

    每个程序员都应学习编程原则

    在此,这篇也只是献给真正热爱编程程序猿,真心想通过基础来升华自己编码技巧程序猿。...每个类都应该有一个单独职责,并且该职责应该完全由该类封装。职责可以定义为修改原因,一次类或模块应该有且仅有一个修改原因。...里氏替换原则(Liskov Substitution Principle) 程序对象应该可以替换为其子类型实例,而不会改变该程序正确性。...迪米特法则(Law Of Demeter) 因为: 类与类之间关系越密切,耦合度也就越来越大,只有尽量降低类与类之间耦合才符合设计模式;对于被依赖类来说,无论逻辑多复杂都要尽量封装在类内部;每个对象都会与其他对象有耦合关系...每个开发都想成为大牛,但大牛不仅仅是表面看到做了很多牛逼系统(神马高并发、高性能等等),也是因为他们本身就比其他开发人员积累更多深厚基础知识(操作系统、编译原理、设计模式、数据结构算法等等)。

    32910

    浅谈程序内存布局

    2、Linux 进程地址空间布局 在用户空间里,也有许多地址区间有特权地位,一般来讲,应用程序使用内存空间里有如下“默认”区域。...堆区: 堆是用来容纳应用程序动态分配内存区域,当程序使用 malloc 或者 new 分配内存时候,得到内存会来自堆里。...Linux 系统下,提供两种堆空间分配方式: brk() 统调用和 mmap() 系统调用。 这两种方式分配都是虚拟内存,没有分配物理内存。...这种方式称为位围(Bitmap),其核心思想是将整个堆划分为大量块(block),每个大小相同。...当用户请求内存时候,总是分配整数个块空间给用户,第一个块我们称为已分配区域头(Head),其余称为己分配区域主体(Body),而我们可以使用一个整数数组来记录块使用情况,由于每个块只有头/主体

    1.4K30

    Linux 底层原理」理解进程内存布局,掌握程序动态

    在《攻克 Linux 系统编程》中,我们解释了 ELF 文件头中指定程序入口地址,各个节区在程序运行时内存排布地址等,指都是在进程虚拟空间中地址。...实际上,每个进程只存活在自己虚拟世界里,却感觉自己独占了所有的系统资源(内存)。 当一个进程要使用某块内存时,它会将自己世界里一个内存地址告诉操作系统,剩下事情就由操作系统接管了。...该做法另一结果则是降低了每个进程内存管理复杂度,进程只需关心如何使用自己线性排列虚拟地址,而不需关心物理内存实际容量,以及如何使用真实物理内存。...栈和堆分别向相对方向增长,系统会有相应保护措施,阻止越界行为发生。 在 Linux 系统中,使用如下命令可查看一个运行中进程内存排布。 ?...在内核中,它们代码段所在只读存储区会共享相同物理内存页,可读可写数据段、堆及栈等内存,内核会使用写时拷贝技术,为每个进程独立创建一份。

    1.9K30

    Linux吃掉我内存

    在Windows下资源管理器查看内存使用情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统性能。...这正是Windows和Linux内存管理上区别,乍一看,Linux系统吃掉我们内存Linux ate my ram),但其实这也正是其内存管理特点。 ?...从低速块设备上读取数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,它可以从内存中直接读取,从而绕开低速块设备,从而提高系统整体性能。...而Linux会充分利用这些空闲内存,设计思想是内存空闲还不如拿来多缓存一些数据,等下次程序再次访问这些数据速度就快了,而如果程序要使用内存而系统中内存又不足时,这时不是使用交换分区,而是快速回收部分缓存...其实不然,Linux并没有吃掉你内存,只要还未使用到交换分区,你内存所剩无几时,你应该感到庆幸,因为Linux缓存了大量数据,也许下一次你就从中受益!

    98450

    Linux 内存分页管理

    图1 虚拟内存地址和物理内存地址对应 应用程序来说对物理内存地址一无所知。它只可能通过虚拟内存地址来进行数据读写。程序中表达内存地址,也都是虚拟内存地址。...因此,C程序中表达内存地址,都是虚拟内存地址。...因此,Linux采用了分页(paging)方式来记录对应关系。所谓分页,就是以更大尺寸单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...这种对应关系让上层抽象内存和下层物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...因此,Linux分页表,采用了多层数据结构。多层分页表能够减少所需空间。 我们来看一个简化分页设计,用以说明Linux多层分页表。

    1.1K30

    Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配内存 )

    文章目录 一、Linux 内核 动态分配内存 系统接口函数 二、统计输出 vmalloc 分配内存 一、Linux 内核 动态分配内存 系统接口函数 ---- Linux 内核 " 动态分配内存 "...是通过 " 系统接口 " 实现 , 下面介绍几个重要 接口函数 ; ① 以 " 页 " 为单位分配内存 : alloc_pages , __get_free_page ; ② 以 " 字节 " 为单位分配..." 虚拟地址连续内存块 " : vmalloc ; ③ 以 " 字节 " 为单位分配 " 物理地址连续内存块 " : kmalloc ; 注意 该 " 物理地址连续内存块 " 是以 Slab 为中心...; 二、统计输出 vmalloc 分配内存 ---- 执行 grep vmalloc /proc/vmallocinfo 命令 , 可以统计输出 通过 vmalloc 函数分配 " 虚拟地址连续内存

    5.2K30

    Linux内存描述之内存节点node--Linux内存管理(二)

    因此linux内核需要用一种体系结构无关方式来表示内存....因此linux内核把物理内存按照CPU节点划分为不同node, 每个node作为某个cpu结点本地内存, 而作为其他CPU节点远程内存, 而UMA结构下, 则任务系统中只存在一个内存node, 这样对于...对应一个内存簇bank,即每个内存簇被认为是一个节点 系统物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 内存被划分为结点....内存每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615 在分配一个页面时...,用于描述该节点所拥有的物理内存页,它包含了该页面所有的内存页,被放置在全局mem_map数组中 bdata 这个仅用于引导程序boot 内存分配,内存在启动时,也需要使用内存,在这里内存使用了自举内存分配器

    7.8K21

    Linux内存分页管理

    图1 虚拟内存地址和物理内存地址对应 应用程序来说对物理内存地址一无所知。它只可能通过虚拟内存地址来进行数据读写。程序中表达内存地址,也都是虚拟内存地址。...因此,C程序中表达内存地址,都是虚拟内存地址。...因此,Linux采用了分页(paging)方式来记录对应关系。所谓分页,就是以更大尺寸单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...这种对应关系让上层抽象内存和下层物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...因此,Linux分页表,采用了多层数据结构。多层分页表能够减少所需空间。 我们来看一个简化分页设计,用以说明Linux多层分页表。

    1.4K10

    Linux内存分页管理

    图1 虚拟内存地址和物理内存地址对应 应用程序来说对物理内存地址一无所知。它只可能通过虚拟内存地址来进行数据读写。程序中表达内存地址,也都是虚拟内存地址。...因此,C程序中表达内存地址,都是虚拟内存地址。...因此,Linux采用了分页(paging)方式来记录对应关系。所谓分页,就是以更大尺寸单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...这种对应关系让上层抽象内存和下层物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...因此,Linux分页表,采用了多层数据结构。多层分页表能够减少所需空间。 我们来看一个简化分页设计,用以说明Linux多层分页表。

    1.3K20

    Linux内存描述之内存页面page--Linux内存管理(四)

    1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 管理区(Zone) 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围内存, 内核可以使用不同映射方式映射物理内存...内存每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615, 每个结点关联到系统中一个处理器...因为即使在中等程序内存配置下, 系统内存同样会分解为大量页. 例如, IA-32系统中标准页长度为4KB, 在内存大小为384MB时, 大约有100000页....其次标识函数接口也变了, 早期内核中, 针对每个宏标识都设置了一组test/set/clear, 参见/include/linux/mm.h?

    8.3K11
    领券