使用std :: vector和boost :: thread进行内存管理

时间:2012-07-12 20:40:12

标签: c++ memory-management memory-leaks stdvector eigen

假设我有以下代码

class simple_class
{
public:
    simple_class() { }

    void start()
    {
        boost::thread simple_thread(&simple_class::expand,this);
    }

    void expand()
    {
        while(1)
        {
            this->private_vector.push_back((int)1);
        }
    }
private:
    std::vector<int> private_vector;
};

int main()
{
    simple_class* obj1 = new simple_class();
    simple_class* obj2 = new simple_class();
    obj1->start();
    obj2->start();
    while(1) {}
}

显然,这个程序在某些时候内存不足,应该抛出一个std::bad_alloc。但我的问题如下:

  1. 有没有obj1的private_vector在发生之前被obj2的private_vector覆盖的情况?有没有办法保护这个?
  2. 如果我强制类中的private_vector在内存中对齐(就像Eigen与其矩阵一样),当我们定义EIGEN_MAKE_ALIGNED_NEW_OPERATOR时,这会改变问题1吗?

1 个答案:

答案 0 :(得分:0)

我通常不会回答问题,但我几乎100%肯定答案是:

  1. “否”。您正在使用new运算符和STL对象。正如你所指出的,你必须担心的最重要的事情就是很快就会耗尽内存。

  2. 不再。我对Eigen矩阵一无所知,但内存对齐将由OS和编译器决定,而不是由语言决定。