0

使用するたびに次のベクトルを解放したいと思います。

    std::vector<std::array<double,640>> A(480);
    std::vector<std::array<double,640>> B(480);
    std::vector<std::array<double,640>> C(480);
    std::vector<std::array<double,640>> D(480);

私が持っているすべてのベクトルのいくつかは、コミットから毎秒数メガバイトのループを蓄積していますが、私は自分のアプリをいくつかの非強力なマシンで使用したいので、本当に望んでいません。

では、これらのベクトルを解放するにはどうすればよいでしょうか。

4

2 に答える 2

3

のコンテンツを解放するにはvector、スコープ外に出すか、それが属するクラス インスタンスとともに破棄します (正確な状況に応じて)。

それほど長く待てない場合は、いつでも古き良きswap-with-emptyイディオムを使用して、メモリが実際に解放されるようにすることができます。

std::vector<std::array<double,640>>().swap(A);
// or, nicer version using C++11's decltype, which avoids typing the exact type:
decltype(A)().swap(A);
于 2013-07-16T07:51:11.660 に答える
3

ベクトルがスコープ外になると、占有していたメモリは自動的に解放されます (含まれているオブジェクトのデストラクタの呼び出しを含む)。そのため、メモリ要件が高い場合は、可能な限り小さい範囲でベクトルを使用するようにしてください。

例を挙げる

void reallyGreedyFunc()
{
    // next allocates the memory for 480 fixed size arrays of 640 doubles on the heap
    // only the management structures will be kept on the stack
    std::vector<std::array<double,640>> A(480);

    //... do something
} // A goes out of scope and all the memory it has occupied is released
于 2013-07-16T07:52:05.620 に答える