簡體   English   中英

使用std :: vector和boost :: thread進行內存管理

[英]Memory management with std::vector and boost::thread

假設我有以下代碼

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. 再沒有 我對本征矩陣一無所知,但是內存對齊將由操作系統和編譯器而不是語言決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM