内存中的5大区域

栈区

  1、从高地址向低地址分配;

  2、存储局部变量,函数结束立即释放。

堆区

  1、从低地址向高地址分配;

  2、允许程序员手动向堆区申请空间,用完需手动释放。常用函数:malloc(申请)    calloc(申请)    realloc(扩容)     free(释放)

  3、对象也是在堆区存储的。  

BSS段

  存储未初始化的全局变量、静态变量。

  当全局问题、静态变量初始化后,就会释放,转而存储在常量区。

数据段(常量区)

  存储已初始化的全局变量、静态变量、常量。程序结束时才会释放。

代码段

  存储程序的代码(指令),程序结束时才会释放。

时间: 2024-11-10 20:40:59

内存中的5大区域的相关文章

浅析JVM内存结构和6大区域(转)

其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过分页或分片技术将内存中的数据再flush至硬盘.那JVM的内存结构到底是如何呢?JVM做为一个运行在操作系统上,但又独立于os运行的平台,它的内存至少应该包括象寄存器.堆栈等区域. JVM在运行时将数据划分为了6个区域来存储,而不仅仅是大家熟知的Heap区域,这6个区域图示如下: 下面将逐一介绍下各个区域所做的工作及其充当的功能.

浅析JVM内存结构和6大区域

其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过分页或分片技术将内存中的数据再flush至硬盘.那JVM的内存结构到底是如何呢?JVM做为一个运行在操作系统上,但又独立于os运行的平台,它的内存至少应该包括象寄存器.堆栈等区域.JVM在运行时将数据划分为了6个区域来存储,而不仅仅是大家熟知的Heap区域,这6个区域图示如下: JVM内存的分配结构示意图下面将逐一介绍下各个区域所

JVM内存结构和6大区域

其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过分页或分片技术将内存中的数据再flush至硬盘.那JVM的内存结构到底是如何呢?JVM做为一个运行在操作系统上,但又独立于os运行的平台,它的内存至少应该包括象寄存器.堆栈等区域. JVM在运行时将数据划分为了6个区域来存储,而不仅仅是大家熟知的Heap区域,这6个区域图示如下: JVM内存的分配结构示意图 下面将逐一介绍下各个区

浅析JVM内存结构和6大区域(转)举例非常好

内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收.GC),这对于开发人员来说确实大大降低了编写程序的难度,但带来的一个副作用就是,当系统运行过程中出现JVM抛出的内存异常(例如OutOfMemoryError)的时候,很难知道原因是什么,另外一方面,要编写高性能的程序,通常需要借助内存来提升性能,因此如何才能合理的使用内存以及让JVM合理的进行内

内存管理--程序在内存中的分布

在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中.这个沙盘就是虚拟地址空间(virtual address space). 1 32位虚拟内存布局 在32位模式下虚拟地址空间总是一个4GB的内存地址块.这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用.每一个进程拥有一套属于它自己的页表,但是还有一个隐情.只要虚拟地址被使用,那么它就会作用于这台机器上运行的所有软件,包括内核本身.因此一部分虚拟地址必须保留给内核使用: 图 1 这并不意味

JAVA变量在内存中的分配

变量是程序中最基本的存储单元,从本质上讲,变量其实是内存中的一小块区域.所以要为其分配一定的存储空间. 变量的类型 按数据类型: 基本数据类型 引用数据类型 按声明的位置: 局部变量 成员变量 程序在计算机内存的分布: 栈区: 由编译器自动分配释放,主要存放Java程序运行时所需的局部变量.方法的参数.对象的引用以及中间运算结果等数据.其操作方式类似于数据结构的栈. 堆区: 不是系统为程序自动分配的,是程序执行过程中有new语句为变量分配的,主要存放Java程序运行时创建的所有引用类型,即使指向

JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配

Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java中的变量与数据类型”中的介绍,“变量是在内存中分配的保留区域的名称.换句话说,它是一个内存位置的名称”,也就是说我们通过这个变量名字就可以找到一个指向这个变量所引用的数据的内存指针,根据变量的类型我们可以知道这个指针之后的几个字节里存储了这个变量所引用的数据. 所以,了解变量在方法区.栈内存.堆内存

VC++ 中使用内存映射文件处理大文件

摘要: 本文给出了一种方便实用的解决大文件的读取.存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍. 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile().WriteFile().ReadFile()和MFC提供的CFile类等.一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB.几百GB.乃至几TB的海量存储,再以通常的文件处理方法进行处

Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法

当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以android处理图片时不得不考虑图片过大造成的内存异常. 那时候只是简单地缓存图片到本地 然后将图片进行压缩,但是感觉这个问题没有很好的解决办法,只是减小了发生的几率 这里,我将前辈们解决的方法重新整理一番,方便自己以后使用. 1.在内存引用上做些处理,常用的有软引用.强化引用.弱引用 import java