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

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

最佳答案

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

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

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

关于c++ - 使用 std::vector 和 boost::thread 进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460295/

相关文章:

javascript - 更改图像时简单幻灯片代码的内存泄漏

c++ - C++ 类中二维数组的正确内存分配

c - 从结构中释放分配的内存

c++ - 在这种情况下我应该使用指针 vector 吗?

c++ - 需要帮助查找内存泄漏

c++ - valgrind 报告 mysql_real_connect 泄漏

c++ - 在 std::list 中合并(将两个项目融合在一起,用融合替换它们)项目的算法(即破坏性聚类)

c++ - 计算一个 cuda 内核有多少 block 和线程,以及如何使用它们

c++ - 帧率独立动画问题

c++从另外两个集合形成集合