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);

我拥有的所有向量中的一些向量正在从 Commit 中累积每秒几兆字节的循环,我真的不希望这样,因为我想在一些非高性能机器上使用我的应用程序。

那么,如何释放这些向量呢?

4

2 回答 2

3

要释放 a 的内容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 回答