Unabhängig davon, dass dieses Vorgehen eh bestraft gehört (was die Speicherverwaltung hier übernimmt)
ist es einfach nur schwachsinnig so oft nutzlos den Speichermanager zu beschäftigen.
Du hast also gleichzeitig 1-2 große Speicherblöcke (das Array),
eine Masse an kleinen Speicherblöcken (die vielen Strings)
und zussätzlich noch im Speicher verteilt anderes Zeugs, wie die EXE, DLLs usw.
Wie im alten DelphiMM Speicher verteilt ist ... tja, könnte man mal nachsehn.
https://www.delphipraxis.net/1525208-post13.html
Im aktuellen FastMM ist kleiner und großer Speicher bestimmt aus diesem Grunde möglichst voneinander getrennt.
PS: Die 4-GB-Option (LargeAddressAware) ist auch im alten Delphi nutzbar, aber es ist nicht wirklich die Lösung,
denn das Array ist eigentlich bloß 1000000*SizeOf(Integer)+8 * 2 groß, also lediglich 4 und kurzzeitig 8 MB.