メモリマネージャの共有

新しいメモリマネージャ用にコードを書き直しつつ思ったのですけれども。
Delphiでは.exeと.dllの間のメモリマネージャの共有はShareMem.pasを使う限りはborlndmm.dll上のメモリマネージャを共有することになるわけですが、それとは別に各.exeだの.dllだのにもメモリマネージャのコード自体は埋めこまれるわけで。Systemユニットにある以上外す方法は存在しないわけで。これがC++Builderからなら同名の関数を宣言してリンカの引数に優先して使われる順番で渡すなんて手も考えられますがそれは置いておいて。…そういえばdcc32.exeはilink32.exeを使っている節が無いですね。…更にそういえばdcc32.exeもilink32.exeも.exeなのに何かの関数をエクスポートしてるような。これ調べたらコード補完とか自前で実装できるのでしょうか?…あああ、どんどん脱線していく。閑話休題
だったら、本体.exeでSysGetMemだのをexportsしてしまって、.dllでGetModuleHandle('exe名'または0)のGetProcAddressのSetMemoryManagerのほうが、borlndmm.dllを使わないで済むだけ省メモリかつ起動もより速くなるのではないか、と。.exeが何かエクスポートするのはdcc32.exeやilink32.exeもそうですが使われて無いようでよく使われているみたいですし。
こんな感じです。

exports
	System.SysGetMem name '@Borlndmm@SysGetMem$qqri',
	System.SysFreeMem name '@Borlndmm@SysFreeMem$qqrpv',
	System.SysReallocMem name '@Borlndmm@SysReallocMem$qqrpvi',
	System.SysAllocMem name '@Borlndmm@SysAllocMem$qqri',
	System.SysRegisterExpectedMemoryLeak name '@Borlndmm@SysRegisterExpectedMemoryLeak$qqrpi',
	System.SysUnregisterExpectedMemoryLeak name '@Borlndmm@SysUnregisterExpectedMemoryLeak$qqrpi';

しかしborlndmm.dllは30kb弱程度しかないので、相変わらず我ながらみみっちい…。
でも、割り当て方によっては既にゼロクリアされているケースがあるというだけの理由でSysGetMemとSysAllocMemを分けている新しいメモリマネージャは、もっとみみっちいと思う。
いや、こういうところでちまちま節約していかないから、最近見かけるバイナリは処理内容の割に軒並み巨大なんだ、と無理に思うことにしよう。