1

假设我有以下代码

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. 如果我在定义 EIGEN_MAKE_ALIGNED_NEW_OPERATOR 时强制类中的 private_vector 在内存中对齐(就像 Eigen 对其矩阵所做的那样),这是否会改变问题 1 的内容?
4

1 回答 1

0

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

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

  2. 又不行了。我对本征矩阵一无所知,但内存对齐将由操作系统和编译器决定,而不是由语言决定。

于 2012-07-13T00:25:49.417 回答