C++のソースコードをいくつか変更していますが、著者が実際にスタック上のすべてのものを割り当てていないことに気付きました。ほとんどの場合、割り当て解除のメリットがあります(パフォーマンス上のメリットもありますか?)。私は同じ一貫性を維持したいが、私は、オブジェクトとのようなものの大規模な配列を作成する必要がありスタック上の大きなオブジェクト配列のコンストラクタを呼び出す
:
Object os[1000] = {Object(arg), Object(arg), ....};
はそれをカットするつもりはありません。その周りに検索すると、この回避する方法のように思えるだけです:
vector<Object> os(1000, Object(arg));
これはまだヒープに割り当てますが、(私は他の記事で読んだから)スタックのように割り当てを解除します。これは構文上の問題のように思えるので、他にもオプションがあるのだろうかと思っています。多分賢明な#define人々は知っている。
これは主に冗談ですが、真実の要素を持っています...オプションがあります:ポインタと参照とデザインを使用してメモリ管理が問題にならないようにする方法を学びます。 –
パフォーマンス上の利点:スタック割り当ては常に* O(1)です。ヒープ割り当ては非決定的です。 – Mehrdad
@Mehrdad:無限のスタックを持つ理想的なコンピュータで作業しているなら、常に* O *(1)です。現実の世界では、最終的に現在のスタック制限を超えて割り当てることになり、OSはあなたにもっと多くのメモリを割り当てる必要があります。最悪の場合、使用可能なスタック領域が使い果たされ、プロセスが進行します。 –