私の静的リンクされたVisual C++ 2012プログラムはCRTLエラーを散発的に生成します: "R6016 - スレッドデータ用のスペースが足りません"。エラーR6016の解決 - スレッドデータのための十分なスペースがありません
マイクロソフトの最小限のドキュメントでは、新しいスレッドが生成されたときにこのエラーメッセージが生成されるが、十分なメモリが割り当てられていないと述べています。
しかし、私のコードでは明確に定義された2つのケースで明示的に新しいスレッドが生成されますが、ここではどちらも発生していません(確かにマイクロソフトライブラリが内部でスレッドをうまく生成します)。 1人のユーザーが、プログラムがバックグラウンドで存在したときにこの問題を報告しました。
デフォルトの1MBの予約済みスタックサイズまたはヒープサイズをオーバーライドしていないことがわかりました。プログラムで使用されているメモリの総量は、通常、ごくわずかです(実際のRAMが12GBのシステムでは3MB-10MB 、その半分以上は割り当てられていない)。
これは非常にまれです(私はそれを追跡できないため)、複数のマシンで報告されています。私はこれについてWindows 8.1でしか聞いたことはありませんが、あまり読んでいないでしょう。
このエラーに影響する可能性のあるコンパイラ設定がありますか?またはプログラミングミス?
ワイルド推測:アプリ内のスレッドを終了しますか? – DarkWanderer
明らかに、このエラーはTLSスロットに関連しているようです。 http://support.microsoft.com/kb/126709とhttp://stackoverflow.com/questions/13916171/apache-crashes-with-error-r6016-not-enough-space-for-thread-data?lqを参照してください。 = 1 –
私は同意します。メッセージは「スレッドのためのスペースが不足しています**データ**」であり、スレッド(完全停止)ではありません。スレッドデータは、TlsAlloc関数ファミリを使用してスレッドローカルストレージに割り当てられた領域です。このスペースは非常に限られているので、数個以上のアイテムを格納する必要がある場合は、自分のデータ構造を作成し、このデータ構造へのポインタをTLSに格納することをおすすめします。 –