首页 > 系统相关 >delphi D11编程语言手册 学习笔记(P393-419) 对象与内存

delphi D11编程语言手册 学习笔记(P393-419) 对象与内存

时间:2022-12-10 20:14:49浏览次数:56  
标签:释放 D11 P393 delphi stack 内存 heap 堆栈 Delphi

 

 这本书可以在 Delphi研习社②群 256456744 的群文件里找到. 书名: Delphi 11 Alexandria Edition.pdf

 这些年来,Delphi 行动装置编译器提供了一个不同的内存模式,称为自动参考计数(ARC,Automatic Reference Counting)。这个管理模式是由 Apple开始从 Objective-C 语言推广的,ARC 让编译器支持对象参考在内存中被使用的次数,并在这个次数被设为 0 的时候(也就是该对象没有在任何地方被使用到的时候),就把该对象自动释放掉。这个作法跟 Delphi 在所有平台上对接口参考所处理的作法很像。从 Delphi 10.4 开始,对 ARC 的支持已经从所有平台全数取消了。

 

 全局数据、堆栈以及 Heap
  在任何一个 Object Pascal 的应用程序里面所使用的内存可以分成两个领域:源码与数据.在一个程序的执行文件里面包含几个部分,包含资源(例如图片、窗体描述档案),以及由程序加载到内存使用的函式库。这些内存区块是只读的(在几个平台上,例如 Windows),且可以让多个处理程序共享.仔细研究资料部分也是很有趣的。Object Pascal 程序(像大多其他的编程语言的写法一样)的数据是分成三大块来储存的:全局内存、堆栈、Heap。

1.全局内存

  也叫静态内存,用来储存生命周期从应用程序开始到结束为止的变量数据所需要的空间.这些空间不会被转移也不会被释放,直接到程序退出时,才会被释放.

全局变量就是使用这一类的内存.如果全局变量是一个类类型或是字符串/动态数组类型,使用到的全局内存空间只有4byte或者8byte的对象参考而已

2.堆栈  heap(堆)与 stack(栈)  

堆栈是动态的内存区域,这个区域会依照后进先出的顺序来配置与释放。这意味着最后被配置的内存对象必须最先被删除掉 .做个比喻:就是像弹匣一样,后压入的子弹会被先打出去!

堆栈内存一般是不会自动进行初始化也不会被自动清除的.这也是为什么局部变量一定要先初始化再使用的原因.

堆栈的大小通常是在编译作业的过程就已经决定了的.

程序需要的内存空间分为 heap(堆) 和 stack(栈);

heap(堆) 是自由存储区, 需要手动申请、手动释放 (手动挡).如果只申请不释放, 就会发生"内存泄露";

stack(栈) 是自动存储区,自动申请、自动释放(自动挡).

不需要申请和释放空间的元素, 譬如变量(var)、结构(record)等, 是存与 stack(栈);
反之如需要 Create 和 Free 的对象、需要 GetMem 和 FreeMem 的指针等, 则是存于 heap(堆);

时间上,stack(栈) 比 heap(堆)  快一点点.

  

  

 

标签:释放,D11,P393,delphi,stack,内存,heap,堆栈,Delphi
From: https://www.cnblogs.com/yoooos/p/16972123.html

相关文章