由于我相信64位 Delphi编译器很快就会出现,我很好奇是否有人知道现在32位的程序将在使用64位编译器时编译和工作而不做任何更改.
如果有一般规则,我们应该在旧程序中系统地进行哪些更改以编译为64位?
当64位编译器突然出现时,做好准备是很好的 ...
任何建议将不胜感激.
我正在使用Delphi 2010.我必须设置UseLatestCommonDialogs为False并另外将ofOldStyleDialogOpen和Save对话框的属性设置为true,如果我希望Open 7和Save Dialogs在Windows 7中工作(否则它们根本不打开).我也为堆栈预留了相当多的空间:
{$M 16384, 60048576}
Run Code Online (Sandbox Code Playgroud)
因为我在大型数据集上使用递归算法.现在我想知道问题是什么:
新的对话框似乎非常耗费空间,有时它们在开始时工作,在一组打开和保存对话框执行之后它不再打开对话框(也许对话框在执行后不释放内存?)
Windows 7中是否有错误?
还有其他人遇到过类似的问题吗?
使用古老的对话框在Windows 7上工作看起来有点奇怪(它们甚至比XP风格更老,我认为它们看起来像在Windows NT中).
任何建议将非常感谢.
提前致谢.
我们知道在64位计算机中,指针将是8字节,这将使我们能够处理大量内存.但另一方面,普通人现在可用的存储器高达16G,这意味着目前我们不需要8个字节用于寻址,而是5个或最多6个字节.
我是Delphi用户.
问题(可能是64位编译器的开发人员)是:
是否可以在某处声明您希望用于指针的字节数,这对整个应用程序都有效.如果您有数百万个指针的应用程序,并且您将能够声明指针只有5个字节,那么将占用的内存量将会低得多.我可以想象这可能很难实现,但无论如何我对它很好奇.
提前致谢.
我使用的是DelphiIXE。
我了解到 GlobalMemoryStatus 在 64 台 RAM 超过 4G 的计算机上可能会返回错误结果,因此应该使用 GlobalMemoryStatusex。
但是,另一方面,如果我在 32 位计算机上使用 GlobalMemoryStatusex,结果也会错误(返回的数字为 0 或巨大)。
当然我可以准备两个程序:一个用于64位计算机,一个用于32位计算机,并使用正确的内存状态,但是有没有办法使用相同的调用或识别计算机是64位的?并做类似的事情:
if comp64 then begin
GlobalMemoryStatusex
....
end
else begin
GlobalMemoryStatus
....
end;
Run Code Online (Sandbox Code Playgroud)
这是我现在使用的代码:
var
MS1: TMemoryStatusex;
begin
GlobalMemoryStatusex(MS1);
showmessage('KiloBytes of physical memory: '+FormatFloat('#,###" KB"', MS1.ullTotalPhys / 1024)+chr(10)+
'Percent of memory in use: '+Format('%d%%', [MS1.dwMemoryLoad])+chr(10)+
'KiloBytes of free physical memory: '+FormatFloat('#,###" KB"', MS1.ullAvailPhys /1024)+chr(10)+chr(10)+
'KiloBytes of paging file space: '+FormatFloat('#,###" KB"', MS1.ullTotalPageFile / 1024)+chr(10)+
'KiloBytes of free paging file space: '+FormatFloat('#,###" KB"', MS1.ullAvailPageFile …Run Code Online (Sandbox Code Playgroud)