堆栈区别:

栈:对于一台机器而言,栈的空间是固定的,而且远小于堆空间。栈的先进后出无需多言,其使用是非常普遍的,但都是存储轻量型数据。比如在函数调用时,会将 某些函数参数压栈保护;函数体内的指针、局部变量都是存储在栈中的。你不太可能会在一个函数体内使用几十万个字节的局部变量吧,栈的空间足矣;
堆:堆的空间大小与机器的配置有关。你在使用new的时候,首先会在虚拟内存空间中开辟存储空间,若虚拟内存耗完,则会使用你的存储器,也就是你的硬盘空
间,所以,在目前的机器配置上,你可以随意new而不太用担心内存不够用。但是,内存的泄露也都是由堆内存引发的。当然在java里面是不用太操心这个问
题了。

说简单点,就是堆适用于存储对象实例,和类信息的,其中的数据可以为多线程共享,里面的数据存在时间视对象与类的存在时间而定。一般较长,而且里面的数据回收需要GC
而栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。无需GC回收

据说经典的讲解:http://blog.csdn.net/hairetz/article/details/4141043

时间: 2024-07-30 02:37:00

堆栈区别:的相关文章

堆栈区别

注:转过来的 一.预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其    操作方式类似于数据结构中的栈.    2.堆区(heap)—   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.    3.全局区(静态区)(static)—,全局变量和静态变量的存储是放

IOS使用Block —— 3 Block的两个注意点

首先普及一下内存存储区域知识: 内存分为五大区域:堆.栈.全局区.文字常量区.代码区 堆存放:由new.alloc分配的内存块,由程序员控制释放     p1 = (char *)malloc(10); 栈存放:存放函数参数.局部变量,在不需要的时候由编译器自动清除的变量存储区.   int b;   char s[] = “abc”;   char*p2; 全局区(静态):全局变量和静态变量存储放在一块的,程序结束后由系统释放 文字常量区:常量字符串放在这里,程序结束系统释放 代码区:存放函数

C/C++中变量的分配和在内存中的存储方式

操作系统与C语言中的堆栈及其区别 CSDN C/C++ 一个由C/C++编译的程序占用的内存分为以下几个部分 1. 栈区(stack)- 由编译器自动分配释放,存放函数的参数名,局部变量的名等.其操作方式类似于数据结构中的栈. 2. 堆区(heap)- 由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3. 全局区(静态区)(static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的

Kernel--试题

1. 内核堆栈区别: 1.栈自动分配回收,函数里面声明的变量:2.堆:malloc kmalloc申请的空间,需要自己释放 https://blog.csdn.net/tainjau/article/details/79430905 https://www.cnblogs.com/alantu2018/p/8994603.html https://blog.csdn.net/yaowangII/article/details/79851968 https://blog.csdn.net/this

队列和堆栈的区别

如题,队列和堆栈的区别 首先这个问题是非常具有歧义的.堆栈其实是堆和栈,都是内存的不同区域. 那么这里的堆栈,应该不是指内存,而是java.util.Stack<E>(类).应该称之为栈.之所以叫堆栈,应该是某些人的理解问题. 这里的队列,应该是java.util.Queue(接口) 就是说,java集合中的两种数据结构的对比. 一句话形容其区别,就是: 队列是FIFO的(先进先出): 堆栈式FILO的(现今后出): 以上. 队列和堆栈的区别,布布扣,bubuko.com

java 堆栈的区别

java有两种内存管理:堆 和 栈. 栈中保存的是基本数据类型(如:int.short.char.long等)与对象句柄. 栈中保存的内存在变量超出作用域后会被自动释放. 栈的存取速度比堆快,数据可以共享,但是不灵活. 举个例子: int i = 5: int j = 5; String s1 = "abc"; String s2 = "abc"; 其中 i 和 j ,s1 和 s2在栈中保存的数据是共享的.也就是说改变过其中一个变量的值,另外一个变量的值也会被相应

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。

普通集合和泛型集合的区别: 泛型集合与传统集合相比 类型更安全. 泛型集合无需装箱拆箱操作. 泛型的重要性. 泛型是未来五年的主流技术 ... 通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员.此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱. 下面的泛型类型对应于现有的集合类型: List 是对应于 ArrayList 的泛型类. Di

.Net中堆栈和堆的区别

多线程在笔试面试中经常出现,下面列出一些公司的多线程笔试面试题.首先是一些概念性的问答题,这些是多线程的基础知识,经常出现在面试中的第一轮面试(我参加2011年腾讯研究院实习生招聘时就被问到了几个概念性题目).然后是一些选择题,这些一般在笔试时出现,虽然不是太难,但如果在选择题上花费大多时间无疑会对后面的编程题造成影响,因此必须迅速的解决掉.最后是综合题即难一些的问答题或是编程题.这种题目当然是最难解决了,要么会引来面试官的追问,要么就很容易考虑不周全,因此解决这类题目时一定要考虑全面和细致.

深入C#内存管理来分析值类型&amp;引用类型,装箱&amp;拆箱,堆栈几个概念组合之间的区别

C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程序猿,开个玩笑^_^. 相信有过C#面试经历的人,对下面这句话一定不陌生: 值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱. 但仅仅背过这句话是不够的. C#程序员不必手工管理内存,但要编写高效的代码,就仍需