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不在其他地方存储动态数组引用的副本,增加引用计数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |