Delphi 为什么bds.exe可以识别大地址而dcc32.exe不能?我可以修补dcc32.exe头并且它可以正常工作吗?

Delphi 为什么bds.exe可以识别大地址而dcc32.exe不能?我可以修补dcc32.exe头并且它可以正常工作吗?,delphi,msbuild,delphi-10-seattle,Delphi,Msbuild,Delphi 10 Seattle,Delphi10的一大承诺是减少内存不足错误。这是因为IDE现在可以分配大于2GB的地址,并在PE头中为bds32.exe定义一个特殊标志: 我们有一个带有MSBUILD的自动生成环境,它直接调用dcc32.exe。遗憾的是,dcc32.exe不包含此标志,并且无法编译某些项目,因为没有足够的可用内存 我怀疑这只是Embarcadero方面的疏忽。他们所做的大型地址感知更改的主要焦点是IDE。通常,易受内存不足故障影响的是IDE。我怀疑命令行编译器很少遇到这种故障 现在,编译器代码在IDE进程

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

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


我怀疑这只是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标志是非常安全的。当您这样做时,明智的做法是执行一些自上而下的分配测试来对更改进行压力测试。详情可在此处找到:。

我怀疑这只是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标志是非常安全的。当您这样做时,明智的做法是执行一些自上而下的分配测试来对更改进行压力测试。详细信息可以在这里找到:。

只有当它没有按设计工作时才是一个bug。它不支持大地址,也不支持大地址。我从来没有让命令行编译器需要足够的内存来解决这个问题,我经常在MSBuild中使用它。不管大卫怎么说,DCC32并不是一个古老的程序;它目前得到维护,最近有了实质性的变化(为了支持新的语言特性)。Delphi10的最大承诺是为IDE本身提供更多内存,而且它已经做到了这一点;没有任何关于DCC32内存增加的说法。@KenWhite古代程序得到维护。这当然是一个有点古老的计划。在引入大地址感知概念之前,它肯定已经发展了很长时间。因此,Emba似乎没有解决使其支持2GB以上地址所需的更改。所以,这就是为什么我要用自顶向下的内存分配进行测试。@ventisei您启用了自顶向下的内存分配吗?您确实应该这样做,重新启动,然后重新测试修改后的dcc32。如果它在这些条件下工作,那么我认为它用于生产是安全的。但正如我所说,您可能会发现像反恶意软件这样的工具在自上而下的分配下运行时存在问题。您确实需要这样做,以确保清除任何大于2GB的bug。并不能保证您能全部获得,但当我在D6天启用大地址感知时,像这样的自顶向下测试非常有效。@KenWhite我不会就此与您展开讨论。如果我买了一个IDE,我希望编译器至少能编译出合理的输入。我会在质量门户网站上报告这一点,因为对我来说这是一个问题。只有当它不能按设计工作时,它才是一个bug。它不支持大地址,也不支持大地址。我从来没有让命令行编译器需要足够的内存来解决这个问题,我经常在MSBuild中使用它。不管大卫怎么说,DCC32并不是一个古老的程序;它目前得到维护,最近有了实质性的变化(为了支持新的语言特性)。Delphi10的最大承诺是为IDE本身提供更多内存,而且它已经做到了这一点;没有任何关于DCC32内存增加的说法。@KenWhite古代程序得到维护。这当然是一个有点古老的计划。在引入大地址感知概念之前,它肯定已经发展了很长时间。因此,Emba没有解决mak所需的变革是有道理的