Delphi 2009 切换到 Unicode(/UTF16) 对可执行文件大小和内存占用有何影响(如果有)?

StackOverflow https://stackoverflow.com/questions/82454

  •  01-07-2019
  •  | 
  •  

这是“没有问题太愚蠢”部门的一个:

嗯,正如题主所说:有影响吗?如果有的话,多少钱?我的代码和 DFM 资源中的所有字符串文字现在会在已编译的二进制文件中占用两倍的空间吗?已编译应用程序的运行时内存使用情况如何?现在所有字符串变量都会占用两倍的 RAM 吗?我还应该打扰吗?

我记得在早期的预发布网络广播中有人问过类似的问题,但我不记得答案了。由于试用期只有 14 天,在我需要的第三方库更新之前(大概一个月左右)我不会自己尝试。

有帮助吗?

解决方案

D2009 使用 UTF-16 作为默认字符串类型,尽管您可以根据需要将变量设置为 UTF-8。

扬·戈伊瓦茨 讨论尺寸/速度的权衡 在一篇好的博客文章中。

至少从 D7 开始,DFM 中的字符串文字一直是 UTF-8。因此,使用 D2009 的 DFM 中的字符串不会导致大小增加。

其他提示

我现在终于掌握了 Delphi 2009,在进行必要的调整后,我的项目现在编译并运行得很好。:)

为了快速获得结果,我最初不得不注释掉应用程序的一个稍微复杂的模块,因此它还不是 100% 可比的,但它似乎已经足够安全,可以预测,尽管我们的源代码中存在大量字符串文字(过多的调试日志消息) )用 Delphi 2009 编译的二进制文件的大小可能与以前大致相同 - 如果不是实际上更小!

我想知道,Delphi 编译器实际上是否以任何方式对二进制文件或至少其资源部分执行任何类型的压缩?我确实希望对 UTF-16 字符串文字的更改会在此特定应用程序中产生更大的影响。文字真的以(未压缩的)UTF-16 形式存储在二进制文件中吗?

我还没有时间研究内存占用的差异。

编辑: 与 Unicode 不直接相关,但绝对相关:安德烈亚斯·豪斯拉登 (Andreas Hausladen) 最近发表了一篇关于 (重大) 影响的有趣文章 {$STRINGCHECKS} 编译器选项(顺便说一句:默认情况下打开)编译后的可执行文件大小: http://andy.jgknet.de/blog/?p=487

我等待 Unicode VCL 已经很多年了,终于我们看到了。我认为大多数应用程序不需要担心大小问题,因为它们无论如何都没有那么多字符串文字或在内存中存储大量数据。

可用性问题更加重要,以尽可能证明 Unicode 使用的合理性。

如果一些开发人员想要创建一个小型的 exe,他们可以使用 AnsiString 进行手动优化(如果 i18n 不是问题)。

我已经很多年没有使用 Delphi 了,但这可能取决于他们使用的 Unicode 编码。UTF8 与常规 ASCII 字符集完全相同(当您使用外来字符时,它仅使用多个字节)。UTF16 可能有点臃肿。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top