Delphi字符串共享问题

jpf*_*ius 4 delphi string memory-management delphi-xe

我有大量的对象都存储了文件名.所有文件名都在给定的基目录中(让我们称之为C:\BaseDir\).我现在正在考虑两种选择:

  1. 存储对象中的绝对路径
  2. 在对象中存储相对路径并另外存储基本路径

如果我正确理解Delphi字符串,第二种方法将需要更少的内存,因为基本路径字符串是共享的 - 假设我将相同的字符串字段传递给所有对象,如下所示:

TDataObject.Create (FBasePath, RelFileName);
Run Code Online (Sandbox Code Playgroud)

这个假设是真的吗?内存中只有一个基本路径的字符串实例吗?

如果有人知道处理这种情况的更好方法,也可以随意评论.

谢谢!

Dav*_*nan 6

你是对的.当你用两个字符串变量写s1:= s2时,内存中有一个字符串,其中包含(至少两个)引用.

您还要问是否尝试减少内存中的字符串数量是一个好主意.这取决于与其他内存消耗对象相比有多少字符串.只有你能真正回答这个问题.