09/02/15 11:07:40
>>10
このコードはどういった意味があるんでしょうか?
newで動的にメモリを確保しているのはわかるんですが、
CreateThreadでスレッド生成はどういった意味を持つのでしょうか?
スタックの指定がないのでデフォルト(通常1M)のスタック領域が
割り当てられると思うのですが、通常(XP)の仮想メモリのサイズは
2Gなのでスレッド生成できる個数は2048個だと思います。(MSDNにも記載)
それに加えてnewでの仮想メモリ空間からメモリを確保(?)しているので
生成できるスレッドがもっと少なくなることの実証でしょうか?
>>11
呼び出し規約のデフォルト設定にもよりますが、
stdcallとcdeclではスタック調整のやり方が違うので
不具合の原因になりますね。
ところで少しスタックの話が出たのですが、
少し前に自動変数で全体として1Mを超えてしまう
定義をしてしまい、起動時にクラッシュしてハマった記憶があります。
色々調べた結果、スタックサイズが原因という事だったので
対処法として動的にメモリ確保かスタックを使わずstatic定義にて
モジュールにその領域分を直接埋め込むかで悩んだのですが
結局後者を採用しました。ただ、この場合は起動時に埋め込んだ領域の
初期化処理を行うはずなので、その分オーバヘッドが発生するのでは
と思うのですが、こういった1Mを超える領域を定義する場合
他の方はどういった対処で会費しているのでしょうか?
因みにある構造体を予め決められた個数分配列で定義してファイルから
全て読み込む形にしているので、全て読み込むのではなく都度読み込みに
してもよかったのですが、ファイルアクセスでのオーバーヘッドが出てくると
思ったのでstatic定義でのやり方で解決しました。