Delphi 局部变量内存管理(使用 ZLib 进行流压缩)

Delphi local variables memory management (stream compression with ZLib)

我写了这个非常简单的函数:

function CompressStream(inpStream: TBytesStream;
                        nCmpLevel: TZCompressionLevel = zcFastest): TBytesStream;
var
  aCmpData: TBytes;
begin
  ZCompress(inpStream.Bytes, aCmpData, nCmpLevel);
  Result := TBytesStream.Create(aCmpData);
end;

这是正确的吗?对局部数组变量aCmpData.

中数据的内存持久化存疑

如果我们剪切行 Result := TBytesStream.Create(aCmpData),我们 aCmpData 会在函数结束时超出范围,因此它的关联内存将被释放。

TBytesStream 的构造函数接受一个 TBytes,所以我将它传递给我的本地数组,这应该是一个 "by reference" 操作。

当函数结束并且 aCmpData 超出范围时我的数据怎么办?

TBytes类型是动态字节数组,声明为:

TBytes = TArray<Byte>;

此类动态数组由编译器管理,就像 string 变量一样。不需要显式释放变量,它的生命周期由编译器管理。当没有剩余的数组引用时,它将被销毁。