Everything (and I mean it) that we do in MT is with the eye towards speed/efficiency of execution and reduction of memory usage and memory fragmentation. Everything that can be cached is cached. All chart updates try to draw as little on the chart as possible, and only new stuff. The indicator calculation is done using very efficient state machines. Data storage is done using memory-mapped files, which are memory-usage-efficient. And, of course, everything (like, every window for example) is in its own thread, so that the smoothness of user experience is not compromised. No hiccups (or as few as possible).
The actual memory usage is very hard to predict, since it depends on a LOT of factors. Every indicator you add to the chart adds memory. If your frequency is 15 sec, you use more memory than if you used 1 min. Tick data on hugely liquid stocks can take a LOT of space (when you have 100 ticks per second for 60 days, it adds up). If historical charts have their last candle updated from L1 feed, that adds to CPU usage. To add to the complexity, this is C# - so everything is done using the arcane magics of the internal memory manager, so when it runs a garbage collection you suddenly see memory usage drop etc.
What we do is add features, test, and see what happens. If we see bottlenecks, we solve them. It's an ongoing process.