程序设计的基本原则:栈和堆

时间:2021-01-07 00:53:36


stack栈
heap堆

我们使用更多,更先进的编程语言,使我们能够写更少的代码,并获得优异的成就。对于支付。当我们成为低层次的东西少趋于正常,我们许多人并不完全理解堆和栈实际发生的编译,就是静态和动态类型等之间的差异我不是说所有的程序员不知道这些事情 - 我只是觉得,有时候是值得回过头来这样的老学校的事情。


今天,我们将谈论一件唯一的话题:栈和堆。且堆栈,和很多关注到不同的位置,其中,存储器管理,但这种管理策略是根本不同的。

栈 - 这是对每个线程创建的内存区域。他的作品以LIFO(后入先出),即加入到堆栈存储器的最后一块将是排在第一位堆栈撤出。每次函数声明一个新的变量,它被添加到堆栈中,以及当可变滴出的范围(例如,当函数结束时),它会自动从堆栈中删除。当堆栈变量被释放,该存储区可用于其它堆栈变量。

由于这种性质栈存储器管理是很合乎逻辑的,简单到CPU上执行的;这导致高的速度,特别是,由于周期时间更新字节堆栈是很小的,即这个字节是可能依赖于处理器的高速缓存中。然而,在这样的控制的一个严格的形式也有其缺点。堆栈大小 - 是一个固定值,和过量的分配给存储器堆的限制将导致堆栈溢出。在创建流时指定的尺寸,并且每个变量具有的取决于数据的类型的最大尺寸。这使您可以限制一些变量(例如,整数)的规模,并*提前申报更复杂的数据类型的大小(如数组),因为堆栈不允许他们去改变它。此外,变量,位于堆栈上总是本地。因此,栈可以让你更有效地管理内存 - 但如果你需要使用动态数据结构和全局变量,这是得关注的堆。

堆 - 一个存储器存储,也设在RAM中,其允许的存储器的动态分配,并且不会在堆叠的原理工作:它仅仅是为你的变量仓库。时分配的堆存储器区域,用于存储一个变量,它可以应用不仅在信息流中,而且在整个应用程序。由所述全局变量来确定。这些应用程序分配内存后的区域将被释放。当你运行应用程序堆大小设置,但不像栈,它只是身体上有限的,它可以让你创建动态的变量。


你用一束参考,通常被称为指针交互 - 是变量,其值是其它变量的地址。创建一个指针,指向在堆上的存储器位置,该设置变量的初始值和告诉程序访问此值。由于CPU堆不参与在它的控制的动态特性;在没有垃圾收集(C,C ++)开发的语言需要手动释放不再需要的内存区域。如果不这样做,有可能泄漏和存储器碎片,这显著减慢堆。


在与堆栈相比,堆是慢的,因为变量是散射存储器,并且不坐在堆栈的顶部。不正确的内存管理,堆减慢它的操作;然而,这并没有减弱它的重要性 - 如果你需要一个充满活力和全局变量的工作,使用堆。

结论

所以,你已经结识了栈和堆的概念。总之,堆栈 - 它是非常快的存储器存储,在后进先出的原则工作和由处理器控制的。但这些优点导致堆栈的尺寸限制,并且用于产生值的特殊方法。为了避免这些限制,您可以用一束 - 它允许你创建动态和全局变量 - 但必须管理内存或垃圾收集,或程序员,和一堆运行速度较慢的。