Last week I committed into SVN the last major piece of some changes I've been making to the modules implementation. There are a lot of detailed changes but this last bit involves a change to way structures and functors are implemented. Previously, whenever a signature was used it was completely copied so that the types used in the values were distinct from those in any other use of the signature. I've now changed this so that the signatures are now carried around in their original forms and the type information is carried in a map that only gets applied as late as possible.
The effect of this change is that the memory required for a named signature is allocated once and that using it, either to name a sub-structure in another signature, or as an explicit signature constraint for a structure or functor, incurs only a small additional overhead.
Whether it makes any difference to your code will depend on the extent to which you reuse signatures. It does seem to make a difference to the size of the compiler although other changes have rather swamped it. An extreme example was Lucas' Quantomatic which reduced in size from 150Mbytes to 13Mbytes!
David.