私は最近SECアルゴリズムを書いています(ここのようにhttp://18.7.29.232/bitstream/handle/1721.1/4015/HPCES024.pdf?sequence=2
)。最初の再帰バージョンでは、200000 ポイントを超えると「スタック オーバーフロー」例外がスローされるように見えました。自分のスタックに (再帰の代わりに反復を使用して) 書き込むまで理由がわかりませんでしたが、1000000 ポイントで問題なく動作しました。
関数を呼び出すと、プロセッサと変数の命令が「ランダムに」割り当てられたメモリにコピーされると思います。また、クラス ベクトルのグローバル変数を取得した場合は、コンパクトなメモリ (テーブルなど) が必要だと思います。
問題は、(私の意見では)メモリが小さな部分に分割されている場合、ベクトルを「拡大」できず、「スタックオーバーフロー」例外をスローするため、(たとえば、再帰アルゴリズムで)大量の関数呼び出しがある場合です。
したがって、関数インスタンスのメモリをどこに格納する必要があるかをどうにかして c++ に納得させることができると考えました。ここhttp://www.parashift.com/c++-faq-lite/placement-new.htmlのように、「関数インスタンス」のテーブルを作成するため、メモリを台無しにすることはできません。
出来ますか?