ソフトの配列を増やしたら 0xC00000FD:Stack over flow が出るようになった件について
セキュリティソフトのアップデートで、暗号強度を高めるために、秘密鍵の大きさをでかくして、
配列のサイズを4倍にしたのだけど、
SendMessage を呼び出すと、 0xC00000FD:Stack over flow
が発生するという、奇妙な現象が発生するようになってしまった
プログラムのアセンブラレベルの話なのだが、
関数を呼び出したときに、呼び出し先にローカル変数があると、変数エリアを、スタックフレームに確保して利用するという仕組みがある。
Windows コールバック内で配列を使用すると
当然、コールバック内で SendMessage が呼ばれて、関数が入れ子状態になることがある
そうすると、スタックが、Windows Callback 関数内で使われてる変数のサイズx呼び出し回数分消費されてしまう。
なのでスタックサイズを増やす必要があるのだ。
既定ではスタックコミットサイズが 4096なので、32Kに増やしてみた
ちなみに、スタックサイズを指定しないと、コミットサイズは無視されるようだ。
スタックサイズのデフォルトは1M(1048576)
Comments