kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

ちゃんと容量計算しよう

Visual C++ではプログラマがスタック、ヒープ、静的データを取り分けることができます。静的データはバイナリのサイズと起動時の使用メモリに影響を与えます。
今まで私も人が作ったところあまり見ていなかったのが良くないのだけれど、冷静に見渡すと、かなりDLLでのグローバル変数(静的データとして配置されます)豪華に消費しています。計算したらMB単位で使っています。
そして、他の人からもサーバサイドの処理で「stack overflowが出るのでそちらでも減らして欲しい」と泣きが入ってしまいました。そんな馬鹿なと思ってみてみると、うちの処理でもこれまた数百KB単位で結構減らせそうです。Win32ではスタックはリンクオプションを変えない限り、1MBです。アプリケーションサーバではexeがよそ様の持ち物なので、exeとスタックを共有するdllでは致命的です(editbinで変えられるけど)。
泣きながら作業すると、結構減るもんですね。グローバル変数をヒープに追い出すだけで、起動直後の初期使用量が数十MB(^^;単位で減りました。今まで何やっていたんだといわれそうです(笑)。
ちなみに静的データは
c:\>dumpbin /headers hoge.dll
で出てくるところのinitialized dataが該当します。それはそうと、うちの環境では何故かdumpbinが参照するdllへの適切なパスがない…。