当std::vector一个类的字段时,我们遇到了一些内存问题.我们在这个向量中填充了大量数据,这些数据需要在程序的某个点上发布.但是,即使矢量容量为零,也不会释放或完全释放存储器.
这里有一个简化版的程序.如您所见,class Foo只有一个字段:a std::vector<int>.如果我们创建一个std::vector<Foo>并用Foo对象填充它,当我们清空每个对象内的向量时,内存不会完全释放.
我们使用活动监视器测量了内存使用情况,您可以在每个日志行旁边看到每个阶段使用的字节数.此外,我们添加了另一个版本,我们不使用类Foo对象,在这种情况下,内存完美释放.
#include <iostream>
#include <vector>
class Foo {
public:
std::vector<int> container;
};
int main() {
int n1 = 1000;
int n2 = 100000;
{
std::vector<Foo> foos;
std::cerr << "starting" << std::endl; // 160 KiB
std::cin.get();
for (int i = 0; i < n1; i++){
Foo foo;
foo.container.assign(n2, 666);
foos.push_back(foo);
}
std::cerr << "foos filled" << std::endl; // 382.1 MiB
std::cin.get();
for (unsigned int i = 0; …Run Code Online (Sandbox Code Playgroud)