2012-08-24 128 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