为什么bds.exe大地址识别和dcc32.exe没有?我可以修补dcc32.exe标头,它只是工作吗?

时间:2016-01-22 09:21:45

标签: delphi msbuild delphi-10-seattle

Delphi 10的一大承诺是减少内存不足错误。这是有效的,因为IDE现在可以分配大于2GB的地址,并在bds32.exe的PE-Header中定义一个特殊标志:

PEView for bds.exe

我们有一个MSBUILD的自动构建环境,它直接调用dcc32.exe。遗憾的是,dcc32.exe不包含此标志,因为没有足够的可用内存而无法编译某些项目。

enter image description here

1 个答案:

答案 0 :(得分:2)

我怀疑这只是Embarcadero部分的疏忽。他们所做的大地址感知变化的主要焦点是IDE。通常情况下,IDE容易出现内存不足故障。我怀疑在命令行编译器中遇到此类故障非常罕见。

现在,编译器代码在IDE进程bds.exe中执行。在默认设置下,编译项目时,不会创建外部进程来执行编译。相反,如果查看IDE加载的模块,您将看到dcc32230.dll和dcc64230.dll。这些DLL包含32位和64位Windows编译器。它们包含与dcc32.exe和dcc64.exe相同的代码。

由于dcc32和dcc64的编译器代码可以很好地存在于bds.exe中,这是一个很大的地址识别过程,很难想象dcc32.exe和dcc64.exe在大地址识别条件下不会运行。因此,我认为这是Embarcadero部分的一个简单疏忽,即这些可执行文件没有启用大地址感知PE标志。我建议您提交错误报告/功能请求。

所以我认为您可以安全地修改dcc32.exe和dcc64.exe的可执行文件以启用大地址识别PE标志。当你这样做时,你应该明智地执行一些自上而下的分配测试来压力测试变化。详情请见:https://stackoverflow.com/a/545097/505088