July 22, 2020
https://github.com/dlang/dmd/pull/11381#issuecomment-662593270

The projects tested are as varied as dstats, emsi containers, vibed, mir, and more. They consistently indicate these three places as the heaviest memory consumers:

* https://github.com/dlang/dmd/blob/master/src/dmd/dtemplate.d#L5895
* https://github.com/dlang/dmd/blob/master/src/dmd/mtype.d#L5344
* https://github.com/dlang/dmd/blob/master/src/dmd/dtemplate.d#L2969

Any opportunity to refactor code so as to put those allocations back in the pool is likely to have great impact. I'm thinking:

* Are parts of some objects reused? Then factor the reused parts in immutable members, and use a pointer to the variable parts.

* Lazy copying? syntaxCopy() copies the object, but maybe it's often the case there wasn't a real need for a copy. Maybe a copy-on-write strategy could hel

* Of course, reducing the size of TemplateInstance and TypeIdentifier would be of great help.