windows堆和栈学习笔记
来源:互联网 发布:武汉网络抢单软件 编辑:程序博客网 时间:2024/06/11 02:45
堆(内存)
堆表示程序可用的内存区,也叫动态内存区。堆内存的分配与释放次序是随机的,这就是说,如果你按次序分配三块内存,那么到时并不按分配时的次序释放内存。 堆管理器会负责所有操作,你只需简单地使用GetMem 函数请求新内存或调用constructor 建立对象, Delphi 会返回一个新的内存块(随意重用已经丢弃的内存块)。
堆是应用程序可用的三种内存区之一, 其它两种分别是全局内存区(存放全程变量) 和栈。与堆相反,全程变量内存在程序启动时就分配,然后一直保留到程序终止才释放;栈的内容请详见术语表。
Delphi 使用堆为对象、字符串、动态数组及特殊的动态内存请求(GetMem)内存分配。
Windows 应用程序的地址空间最大允许有 2 GigaByte, 其中大部分能被堆使用。
栈(内存)
栈表示程序可用的内存区,栈内存动态分配,并按特定次序分配、释放。栈内存按后进先出次序(LIFO)分配,这表示最后分配的内存区先被释放。栈内存一般在例程中使用(过程、函数及方法调用)。 当你调用例程时,例程参数及返回值是放在栈中的(除非使用Delphi缺省调用方式,对调用过程进行优化)。此外,例程中声明的变量(在begin语句前的var 块中)也存放在栈中,所以当例程终止时,这些变量会被自动清除(在返回调用点之前以LIFO次序释放)。
栈是应用程序可用的三种内存区之一,其它两种分别是全局内存区和堆。堆的内容请详见术语表。
Delphi 使用栈存放例程参数及其返回值(除非你使用Delphi缺省的 register 调用协定)、局部例程变量、Windows API 函数调用等等。
Windows 应用程序可以预留大量的栈内存,在 Delphi 中你可以通过工程选项的 linker 页设置, 不过一般采用缺省设置就可以了。 如果你收到一个栈溢出错误信息,这可能是因为你的函数进入了死循环自调用,而不是栈空间太小。
- windows堆和栈学习笔记
- 最大堆和堆排序学习笔记
- Windows系统编程学习笔记-堆管理
- Java学习笔记52:Java堆、栈和常量池
- java堆和栈的设置学习笔记
- 学习笔记之堆内存和栈内存的区别
- 堆和栈的笔记
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- Windows操作系统堆和栈的区别
- android学习---- WindowManager.LayoutParams
- 暗时间-学习与思考
- 简单dp 总结
- extjs4 常见问题解决
- 如何让VS编译时自动引用Debug|Release版本的dll
- windows堆和栈学习笔记
- DM6467linux下视频采集芯片驱动的分析
- 利用cxf 开发web service 并利用cxf的wsdl2java开发client
- 解决MyEclipse update progress错误的方法
- Android天气小部件
- [论文笔记]slope one predictors for online rating-based collaborative filtering
- Oracle包被锁定的原因分析及解决方案
- C# 获取项目当前路径
- 《代码大全》阅读笔记____[第一章] 欢迎进入软件构建的世界