gpt4 book ai didi

string - Delphi需要释放/收缩字符串吗?

转载 作者:行者123 更新时间:2023-12-01 19:36:43 26 4
gpt4 key购买 nike

在此示例中,在服务器服务(24/24 小时实时)中,我是否需要释放/收缩 aBaz 以释放清理/内存?

function foo(const aBar : string) : boolean;
var
aBaz : string;
begin
aBaz := 'very very long string';

Result := (aBar = aBaz);

aBaz := ''; // shrink `aBaz` for free memory
end;

更新

  1. 类中的字符串变量已经被类销毁释放了,或者我需要收缩?

例如:

class Foo = class
FBar : string;
public
constructor Create; overload;
destructor Destroy; reintroduce;
end;

constructor Foo.Create(const ABar : string);
begin
FBar := ABar;
end;

destructor Foo.Destroy;
begin
FBar := ''; // destructor already free memory or I need to shrink?
end;
  • 在服务(24/24 小时实时)中,当运行时库释放内存时?
  • 最佳答案

    不,无需释放或收缩字符串。两个原因:

    1. 这个特定的字符串是一个字符串文字。它没有分配在堆上。编译器在 EXE 中包含该字符串的文字副本,当您将其分配给 aBaz 时,该变量直接引用 EXE 文件中的只读内存。没有分配任何内容,因此没有可以释放的内容。

    2. 字符串通常会受到自动引用计数的影响。当字符串变量超出范围时(这就是当您到达此函数中的 end 关键字时 aBaz 发生的情况),该变量引用的字符串将具有其引用计数递减。如果结果计数为零,则运行时库将释放与该字符串关联的内存。

      编译器自动插入引用管理代码。您无需对其执行任何操作。

    关于string - Delphi需要释放/收缩字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33484006/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com