首页 文章

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

提问于
浏览
2

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

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 超出范围时,我的数据怎么样?

1 回答

  • 3

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

    TBytes = TArray<Byte>;
    

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

相关问题