Dann hast du Teraspace falsch verstanden.
Default ist jeder Pointer 16-Byte, nämlich als Pointer definiert. Mit Teraspace reduziert sich der Pointer auf 8 Byte und dann als Zahl, da Pointer vom MI-Typ her 16-Byte sind. Dies ist auch eher der C-Fraktion geschuldet.
Die 16-MB-Grenze galt nur für eine DS. Man kann also durchaus mehr als 16 MB verarzten.
Außerdem stehen %alloc()-Funktionen zur Verfügung um dynamischen Speicher zu ergattern (bis die Platte platzt).

Pointer lösen nicht das Problem sondern verschlimmern es sogar noch, da nicht mal der Compiler mehr die Typisierung prüfen kann (die zur Laufzeit sowieso nicht existent ist).