2012-08-24 60 views
0

我對C++上的容器的內存分配有一個問題。C++容器的內存分配

看看多線程應用程序的僞代碼(假設它是在C++中)。我在main方法中聲明瞭矢量對象。然後我運行一個線程並將此對象傳遞給線程。該線程在另一個處理器中運行。現在,我將100000個元素插入到矢量中。

typedef struct myType 
{ 
    int a; 
    int b; 
}myType; 

ThreadRoutine() 
{ 
    Run Thread in processor P; 
    insert 1000000 elements into myTypeObject 
} 

int main() 
{ 
    std::vector<myType> myTypeObject; 
    CALLTHREAD and pass myTypeObject 
} 

我想知道的內存將被分配給10萬組的元素: - 從主本身 - 從線程

的原因,因爲我要運行請問這是線程在不同的處理器中。而我的機器是NUMA機器。所以如果內存是從線程分配的,它將在線程的本地內存中。但是如果內存是從main分配的,它將從主線程的本地內存庫分配。

根據我的直覺,我會說內存只在線程中分配。請讓我知道你的想法。

+3

請注意,在C++中,您可以只寫'struct myType {...};'。 –

+1

您確定標準分配器僅爲特定線程分配內存嗎?因爲這聽起來不正常,而且簡要地看一下「NUMA是什麼」,這讓我覺得這不是NUMA正常工作的方式。 –

+0

如果我對NUMA有所瞭解,我會認爲最好的答案是編寫一個自定義分配器,並讓該向量使用分配器。那麼你永遠不必擔心哪個線程持有它。或者其他的東西。 –

回答

1

重新分配將從ThreadRoutine()調用 - 因此,無論哪個線程調用(在你的例子中是次要的)。

當然,如果您想避免在輔助線程上調整大小,您可以在主線程上傳遞它之前在主線程上使用reserve

+0

好吧..所以它會像從線程中調用一個新的運營商的權利? –

+0

@TheFlyingDutchman正確。擴大答案。 – justin