我最近在看一些使用SetLength为一个字节数组分配内存的代码,但我没有看到任何释放该内存空间的逻辑.我已经读过,对于一个字节数组,你应该将值设置为nil还是使用Finalize?
处理这个问题的最佳方法是什么...根据我发现的内容,建议如下...
var
x: array of byte;
begin
SetLength(x, 30);
// Do something here
:
// Release the array
x := nil;
Finalize(x);
end;
Run Code Online (Sandbox Code Playgroud)
And*_*and 24
通常,您根本不需要释放内存,因为当标识符(在本例中x
)超出范围时会自动完成.因此,代码中的最后两行完全没有意义.
但是,如果您的程序正在关闭之前,您的标识符不会超出范围,那么您可能希望手动释放与其关联的内存.特别是,如果标识符是一个大的位图图像或类似的东西,您可能希望这样做.然后你可以做x := nil
,SetLength(x, 0)
或类似的事情.
Dav*_*nan 11
动态数组是托管类型.这意味着当最后一次引用数组超出范围时,编译器将处置内存.这意味着在代码中释放数组的代码是毫无意义的.
如果需要,可以使用以下任何等效代码行提前释放数组:
SetLength(x, 0);
Finalize(x);
x := nil;
Run Code Online (Sandbox Code Playgroud)
请注意,如果您对同一个数组有多个引用,则需要对该数组的所有引用执行此操作.