内存中栈,堆,静态区到底有什么区别 数据结构的堆栈,和内存空间的堆栈有什么区别和关系吗??

作者&投稿:徵杰 (若有异议请与网页底部的电邮联系)
以下是专业回答:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放
这里我用代码来帮助理解
public class IamClass{
public IamClass(){}
public int x;
public IamClass(int x){this.x=x;}
}
当声明这个Class :
IamClass iamclass;

在栈上会创建一个不包含任何数据,也不指向任何对象的变量。
使用iamclass=new IamClass(1);后就会在堆上创建一个引用类型对象的实例,并分配内存地址,然后自动传递该实例的引用给构造函数,调用该构造函数后返回该引用给栈中的iamclass变量。
static int i=0,会提前放在静态区里。

内存堆和栈的区别~

一、主体不同
1、内存堆:是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。
2、栈:是一种运算受限的线性表。
二、特点不同
1、内存堆:允许程序在运行时动态地申请某个大小的内存空间。
2、栈:定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。


三、优势不同
1、内存堆:栈是个特殊的存储区,主要功能是暂时存放数据和地址,用来保护断点和现场。
2、栈:只能在一端进行插入和删除操作的特殊线性表。按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。

参考资料来源:百度百科-栈
参考资料来源:百度百科-堆内存

我说一下内存管理中的堆栈,个人之见,仅供参考。
在编写程序时(比如C、C++等),可以简单地把内存分为三个不同的区域:
1、栈,即我们平常说的堆栈,英文为stack,存放自动变量、函数调用产生的临时变量等,该内存空间由编译器自动分配、释放以及管理,访问效率高,但不灵活,空间也小。
2、堆,英文为heap,该内存空间需要程序员手动申请、释放,如C的malloc、free以及C++的new、delete等,平常说的内存泄露就是操作堆引起的,由于需要手动管理,所以访问效率较低,但可以根据需要灵活使用。
3、静态存储区,也是编译器自动管理的,用于存放全局变量、局部静态变量等,与栈中变量的区别是在程序运行期间一直保存变量的值。

堆栈、静态区、堆这三者有什么区别呢,在C语言或java中有区别吗
答:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(st...

内存中栈,堆,静态区到底有什么区别
答:1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放 , 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)...

求夹大神,java中将内存分为堆区,栈区,方法区。静态成员和方法位于方法...
答:保存在栈区中,对象保存在堆区中。静态区 :保存字符常量以及成员变量。栈区中保存的变量就是保存变量的值。引用数据类型:栈区中保存的是对象在堆区的地址,所以也称作栈区的变量地址为引用

Java把内存划分为4个部分 1. 代码区 1、栈区 3、堆区 4、静态区域
答:1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源 2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收 3、静态区(datasegment)—存放全局...

解释内存中的栈堆和静态区的用法
答:2、栈区:对象实例在Heap中分配好以后,需要在Stack中保存一个4字节的Heap内存地址,用来定位该对象实例在Heap中的位置,便于找到该对象实例。3、静态区/方法区:方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。方法区中包含的都是在整个程序中永远唯一的元素,如...

内存堆和栈的区别
答:1、内存堆:是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。2、栈:是一种运算受限的线性表。二、特点不同 1、内存堆:允许程序在运行时动态地申请某个大小的内存空间。2、栈:定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。三、...

c语言里什么变量存储在堆中什么变量存储在栈中啊!
答:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)...

c#程序运行时内存分为哪几个区?
答:可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,...

电脑的缓冲区是指什么?
答:也就是说我们的电脑内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区 1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用...

C语言中,什么是栈,什么是堆
答:栈是属于线程的,每一个线程会有一个自己的栈。2、堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注意它和数据结构中的堆是两回事,分配方式倒是类似于链表,常见的就是malloc出来的都是属于堆区,就像固定出来的区域,到free的时候才释放,有点类似全局的,静态的。