A while ago I found out the [WayBack] not maintained status · hgourvest/superobject@f1c42db · GitHub.
This means you should not use the [WayBack] superobject JSON library in Delphi any more: there won’t be any fixes.
Many people use it, especially because it used to be much more stable than the built-in JSON support of Delphi.
One breaking issue in superobject is the lack of large address space support: due to the pointer calculations in various places, it does not support pointers above the 2 gibibyte boundary as filed in the 2016 [WayBack] Issues with {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} · Issue #22 · hgourvest/superobject · GitHub
This gives problems in at least this case:
- enabling
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
(in older Delphi 7 through 2006 also versions this was{$SetPEFlags $20}
) - using top-down memory allocation, for instance by:
- a user setting
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
valueAllocationPreference
to hex value00100000
- using FastMM4 with the (default)
{$define AlwaysAllocateTopDown}
setting
- a user setting
Example registry file and batch file to enable top-down memory (reboot afterwards):
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "AllocationPreference"=dword:00100000
Command to view:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" | findstr "AllocationPreference"
Command to enable:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v AllocationPreference /t REG_DWORD /d 00100000 /f
Command to disable:
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v AllocationPreference /f
Large Address Aware is a nightmare
Be very very very careful with this, and by enabling Large Address Aware to your executables, as many times they can load 3rd party libraries that often are beyond your control.
Even if there is a slight chance that your code is being used with Large Address Aware enabled, then follow guidelines line in [WayBack] windows – Unit Testing for x86 LargeAddressAware compatibility – Stack Overflow
Summary of [WayBack] memory – Drawbacks of using /LARGEADDRESSAWARE for 32 bit Windows executables? – Stack Overflow:
blindly applying the
LargeAddressAware
flag to your 32bit executable deploys a ticking time bomb!by setting this flag you are testifying to the OS:
yes, my application (and all DLLs being loaded during runtime) can cope with memory addresses up to 4 GB.
so don’t restrict the VAS for the process to 2 GB but unlock the full range (of 4 GB)”.but can you really guarantee?
do you take responsibility for all the system DLLs, microsoft redistributables and 3rd-party modules your process may use?
–jeroen