stack栈
heap堆
今天,我们将谈论一件唯一的话题:栈和堆。且堆栈,和很多关注到不同的位置,其中,存储器管理,但这种管理策略是根本不同的。
栈
栈 - 这是对每个线程创建的内存区域。他的作品以LIFO(后入先出),即加入到堆栈存储器的最后一块将是排在第一位堆栈撤出。每次函数声明一个新的变量,它被添加到堆栈中,以及当可变滴出的范围(例如,当函数结束时),它会自动从堆栈中删除。当堆栈变量被释放,该存储区可用于其它堆栈变量。
由于这种性质栈存储器管理是很合乎逻辑的,简单到CPU上执行的;这导致高的速度,特别是,由于周期时间更新字节堆栈是很小的,即这个字节是可能依赖于处理器的高速缓存中。然而,在这样的控制的一个严格的形式也有其缺点。堆栈大小 - 是一个固定值,和过量的分配给存储器堆的限制将导致堆栈溢出。在创建流时指定的尺寸,并且每个变量具有的取决于数据的类型的最大尺寸。这使您可以限制一些变量(例如,整数)的规模,并被迫提前申报更复杂的数据类型的大小(如数组),因为堆栈不允许他们去改变它。此外,变量,位于堆栈上总是本地。因此,栈可以让你更有效地管理内存 - 但如果你需要使用动态数据结构和全局变量,这是得关注的堆。
堆
堆 - 一个存储器存储,也设在RAM中,其允许的存储器的动态分配,并且不会在堆叠的原理工作:它仅仅是为你的变量仓库。时分配的堆存储器区域,用于存储一个变量,它可以应用不仅在信息流中,而且在整个应用程序。由所述全局变量来确定。这些应用程序分配内存后的区域将被释放。当你运行应用程序堆大小设置,但不像栈,它只是身体上有限的,它可以让你创建动态的变量。你用一束参考,通常被称为指针交互 - 是变量,其值是其它变量的地址。创建一个指针,指向在堆上的存储器位置,该设置变量的初始值和告诉程序访问此值。由于CPU堆不参与在它的控制的动态特性;在没有垃圾收集(C,C ++)开发的语言需要手动释放不再需要的内存区域。如果不这样做,有可能泄漏和存储器碎片,这显著减慢堆。
在与堆栈相比,堆是慢的,因为变量是散射存储器,并且不坐在堆栈的顶部。不正确的内存管理,堆减慢它的操作;然而,这并没有减弱它的重要性 - 如果你需要一个充满活力和全局变量的工作,使用堆。
结论
所以,你已经结识了栈和堆的概念。总之,堆栈 - 它是非常快的存储器存储,在后进先出的原则工作和由处理器控制的。但这些优点导致堆栈的尺寸限制,并且用于产生值的特殊方法。为了避免这些限制,您可以用一束 - 它允许你创建动态和全局变量 - 但必须管理内存或垃圾收集,或程序员,和一堆运行速度较慢的。