加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:25:52 所属栏目:大数据 来源:网络整理
导读:动态数组是引用计数,所以内存被编译器自动释放.我的问题是,何时发生这种自动释放?它会立即发生,还是在包含程序结束时发生? 这是一个具体的例子 procedure DoStuff;var data:TBytes;begin data:=GetData; // lets say data now contains 1 Gig of data. DoS
动态数组是引用计数,所以内存被编译器自动释放.我的问题是,何时发生这种自动释放?它会立即发生,还是在包含程序结束时发生?

这是一个具体的例子

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不在其他地方存储动态数组引用的副本,增加引用计数).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读