栈和堆内存

问题描述:

这里我的问题是 什么是栈和堆内存 我们为什么需要这两种记忆 什么是每个栈和堆内存

+3

尝试回答更简单的问题,例如“什么是Google?”,然后尝试“我如何使用Google?”。在学习了如何搜索之后,回来在*上尝试一下,你可能会注意到这个问题可能已经被提出了400亿次。 – leppie 2011-01-21 10:02:03

+2

肯定是在讲义 – skaffman 2011-01-21 10:02:09

在C/C++语言的内存分配到堆栈的利弊在分配范围结束时自动释放,堆中的内存必须有一些策略(free(),delete ...或者一些垃圾回收器)可用。分配在堆上的内存在不同的功能范围内可见。在堆栈中,我们不能分配大块内存,所以当需要为数据分配大空间时,堆也是有用的。

一言以蔽之:

The stack - 程序使用实际运行程序内存。这包含局部变量,回调数据(例如,当您调用函数,堆栈存储状态并在输入新函数之前将其置于代码中)以及其他一些小事情。您通常不直接控制堆栈,变量和数据被破坏,当您移入和移出函数作用域时创建。

The heap - 程序的“动态”内存。每次您动态创建一个新对象或变量时,它都会存储在堆中。这个内存是由程序员直接控制的,你应该负责创建和删除那里的对象。

我不确定你在问什么上下文,但我可以回答他们在内存分配中的使用。这两个数据结构都需要我的平台,如.NET for Garbage collection。请记住,所有值类型都存储在堆栈上,并且堆中的所有引用类型都被存储。这有助于运行时环境创建一个对象图并跟踪所有对象未被使用并且可以考虑用于垃圾收集。

检查this JVM上的简短文章,它解释Java堆栈和堆。