zoukankan      html  css  js  c++  java
  • [转载] 栈内存和堆内存

    堆(内存)

    堆表示程序可用的内存区,也叫动态内存区。堆内存的分配与释放次序是随机的,这就是说,如果你按次序分配三块内存,那么到时并不按分配时的次序释放内存。 堆管理器会负责所有操作,你只需简单地使用GetMem 函数请求新内存或调用constructor 建立对象, Delphi 会返回一个新的内存块(随意重用已经丢弃的内存块)。

    堆是应用程序可用的三种内存区之一, 其它两种分别是全局内存区(存放全程变量) 和栈。与堆相反,全程变量内存在程序启动时就分配,然后一直保留到程序终止才释放;栈的内容请详见术语表。

    Delphi 使用堆为对象、字符串、动态数组及特殊的动态内存请求(GetMem)内存分配。

    Windows 应用程序的地址空间最大允许有 2 GigaByte, 其中大部分能被堆使用。

     

    栈(内存)

    栈表示程序可用的内存区,栈内存动态分配,并按特定次序分配、释放。栈内存按后进先出次序(LIFO)分配,这表示最后分配的内存区先被释放。栈内存一般在例程中使用(过程、函数及方法调用)。 当你调用例程时,例程参数及返回值是放在栈中的(除非使用Delphi缺省调用方式,对调用过程进行优化)。此外,例程中声明的变量(在begin语句前的 var 块中)也存放在栈中,所以当例程终止时,这些变量会被自动清除(在返回调用点之前以LIFO次序释放)。

    栈是应用程序可用的三种内存区之一,其它两种分别是全局内存区和堆。堆的内容请详见术语表。

    Delphi 使用栈存放例程参数及其返回值(除非你使用Delphi缺省的 register 调用协定)、局部例程变量、Windows API 函数调用等等。

    Windows 应用程序可以预留大量的栈内存,在 Delphi 中你可以通过工程选项的 linker 页设置, 不过一般采用缺省设置就可以了。 如果你收到一个栈溢出错误信息,这可能是因为你的函数进入了死循环自调用,而不是栈空间太小。

     


    ————————————————
    版权声明:本文为CSDN博主「vincent__hu」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/vincent__hu/article/details/487084

  • 相关阅读:
    HTML head 头标签
    p标签text-align:justify以及CSS文字两端对齐
    css雪碧图制作
    ps去掉图片上的文字
    Qt Quick之TableView的使用
    Qt Quick之Canvas
    Qt Quick中的信号与槽
    QT之在QML中使用C++类和对象
    rhel7+apache+c cgi+动态域名实现web访问
    (转载)JDOM/XPATH编程指南
  • 原文地址:https://www.cnblogs.com/pipemm/p/11404904.html
Copyright © 2011-2022 走看看