delphi – 一个动态数组究竟是什么时候收集垃圾?

前端之家收集整理的这篇文章主要介绍了delphi – 一个动态数组究竟是什么时候收集垃圾?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
动态数组是引用计数,所以内存被编译器自动释放.我的问题是,何时发生这种自动释放?它会立即发生,还是在包含程序结束时发生?

这是一个具体的例子

procedure DoStuff;
var data:TBytes;
begin
  data:=GetData; // lets say data now contains 1 Gig of data.
  DoStuffWithData(data);
  // I now want to free up this 1Gig of memory before continuing.
  // Is this call needed,or would the memory be freed in the next line anyway?
  Finalize(data); 

  data:=GetMoreData; // The first array now has no remaining references
  DoStuffWithData(data);
end

调用Finalize()是多余的吗?

解决方法

对Finalize的调用不是很多余.这是真的,动态数组的引用计数将在下一行递减(因此可能会破坏数组),但这只会在分配新的动态数组之后发生.就在GetMoreData返回之前,但是在赋值发生之前,内存中将会有两个动态数组.如果您提前手动销毁第一个,那么一次只能有一个内存中的数组.

存储在数据中的第二个数组将被DoStuff返回时被破坏(假设DoStuffWithData不在其他地方存储动态数组引用的副本,增加引用计数).

原文链接:https://www.f2er.com/delphi/101519.html

猜你在找的Delphi相关文章