小编raf*_*ges的帖子

在用户定义的类中清空std :: vector时未释放内存

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)

c++ memory memory-management vector c++11

5
推荐指数
2
解决办法
408
查看次数

标签 统计

c++ ×1

c++11 ×1

memory ×1

memory-management ×1

vector ×1