標準 C++ では、間違いなくそうではありません。ポータブルな方法では、おそらくそうではありません。特定の OS では、時々。他に何もない場合は、独自の実行可能サイズを開き、実行可能ファイルのヘッダーを調べて、スタックサイズを確認できます。[もちろん、次の問題は「このコードの前にどれだけのスタックが使用されたか」であり、これを判断するのは難しい場合があります]。
別のスレッドでコードを実行する場合、(低レベルの) スレッド インターフェイスの多くで、Posix スレッドpthread_set_stacksize
や MSなどのスタック (またはスタックサイズ) を指定できます_beginthread
。繰り返しますが、実際のスレッド コードに到達する前にどれだけのスペースが使用されたかは正確にはわかりませんが、おそらくそれほど多くはありません。
もちろん、組み込みシステム (携帯電話など) では、スタックサイズは通常非常に小さく、4K、12K、または 64KB が通常です。システムによっては、それよりもはるかに小さい場合もあります。
別の潜在的な問題は、スタック上で実際に使用されているスペースの量を実際に知ることができないことです.コンパイルされたシステムで事後に測定できint array[25];
ます.少なくともアップ25 * sizeof(int)
- ただし、パディングがある可能性があり、コンパイラはレジスタをスタックに保存します。
後付けとして編集:2つのコードパスを持つことにはあまりメリットがありません:
if (enough_stack_space_for_something)
use_stack_based_algorithm();
else
use_heap_based_algorithm();
これにより、かなりの量の余分なオーバーヘッドが追加されます。一般に、組み込み/モバイル システムでは、コードを増やすことは適切な計画ではありません。
Edit2:また、メモリの割り当てがランタイムの主要な部分である場合、おそらくその理由を調べます。たとえば、オブジェクトのブロック作成が役立ちますか?