Der Stack ist standardmäßig auf 1 MB begrenzt, damit Endlosrekursionen mit der "Notbremse" gestoppt werden können. Wenn du nun eine so große Variable auf dem Stack anlegst (lokale Variablen sind immer auf dem Stack), dann geht das halt nicht. Deswegen sollte man in deinem Fall eher auf ein dynamische Array zurückgreifen.
Delphi-Quellcode:
const
size = 1010000;
var
filestream: TFileStream;
buffer: array of byte;
filestream := TFileStream.Create(file, fmOpenReadWrite);
SetLength(buffer, size); // genug Speicher reservieren, die Freigabe übernimmt Delphi für dich
filestream.Read(buffer[0], size); // hier immer das erste Zeichen angeben (außer bei .NET)