This, in part, is an unfortunate consequence of compiling down to Inform 6, which puts all user-defined arrays in Z-machine RAM.
Infocom put a lot of theirs in Z-machine ROM, which ZIL supports with the “pure” flag on table definitions.
I thought I7 had some optimizations to avoid the standard memory management for constant heap values, though – maybe those are only for some types? Or maybe they don’t solve this problem, because the constants are copied into the regular heap as soon as they’re assigned to a variable? (Copy-on-write would really help here.)