1
假設我有以下代碼內存管理與標準::向量和boost ::線程
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
。但我的問題是以下幾點:
- obj1的private_vector是否會被obj2的private_vector覆蓋之前發生?有沒有辦法被保護呢?
- 如果我強制類中的private_vector要在內存中對齊(如Eigen與它的矩陣一樣),當我們定義EIGEN_MAKE_ALIGNED_NEW_OPERATOR時,這會改變問題1嗎?
不,我不這麼認爲。 :) – Chad 2012-07-12 20:43:07
如果不是將元素推送到private_vector,我會不斷調整特徵矩陣的大小並使其更大?或者如果我在展開內部聲明新的特徵矩陣?我知道它不應該,但我問有沒有可能發生的可能性或防止它的方法? – user1194167 2012-07-12 20:45:19
我不知道Eigen分配器是如何工作的,但是如果他們允許在無關的內存上跺腳(因爲'vector's是兩個不同的對象),那將是非常糟糕的。 – Chad 2012-07-12 20:46:18