4

今日、大規模なデータ構造を扱っているときに面白い問題に遭遇しました。最初はベクターを使用して 1000000 整数以上を格納していましたが、後でベクターの動的機能は実際には必要ないと判断し (とにかく宣言されるとすぐに 1000000 スポットを予約していました)、代わりに、データ構造の任意の場所に値を追加できます。そこで、配列とBAMスタック オーバーフローに切り替えました。これは、コンパイル時に配列のサイズを宣言すると、配列がスタックに配置され、代わりに動的ベクトルを使用してヒープに配置されるためだと思います (どちらが大きいと思いますか?)。

では、ここでの正しい答えは何ですか?ヒープに置くためだけに動的メモリ システムに戻しますか? スタックのサイズを増やしますか? それとも、私はここにあるすべてのことから離れているのでしょうか...?

ありがとう!

4

1 に答える 1

4

最初はベクターを使用して1000000以上の整数を格納していました

良いアイデア。

しかし後で、ベクターの動的機能は実際には必要ないと判断しました (とにかく宣言されるとすぐに 1000000 スポットを予約していました)。

あまり良い考えではありません。あなたはそれを必要としました。

代わりに、データ構造の任意の場所に値を追加できると便利です。

私はフォローしません。

これは、コンパイル時に配列のサイズを宣言するとスタックに配置され、代わりに動的ベクトルを使用するとヒープに配置されるためだと思います (どちらが大きいと思いますか?)。

多くの。通常、コール スタックのサイズはデフォルトで 1MB ~ 2MB 程度です。あなたの「ヒープ」(フリーストア)は、実際には利用可能な RAM によってのみ制限されます。

では、ここでの正しい答えは何ですか?ヒープに置くためだけに動的メモリ システムに戻しますか?

はい。

[編集: ヨアヒムの権利 —static別の可能な答えです。]

スタックのサイズを増やしますか?

できますが、4MB を引き伸ばすことができたとしても、他のローカル データ変数を入れる余裕はありません。動的メモリを最大限に活用してください。これは適切なことです。

それとも、私はここにあるすべてのことから離れているのでしょうか...?

いいえ。

于 2012-11-20T01:23:07.840 に答える