C+中容器的内存分配+; 关于C++上的容器内存分配问题,

C+中容器的内存分配+; 关于C++上的容器内存分配问题,,c++,memory,memory-management,C++,Memory,Memory Management,查看多线程应用程序的伪代码(假设它是c++中的)。我在main方法中声明vector对象。然后我运行一个线程并将这个对象传递给线程。该线程在另一个处理器中运行。现在,我在向量中插入100000个元素 typedef struct myType { int a; int b; }myType; ThreadRoutine() { Run Thread in processor P; insert 1000000 elements into myTypeObject

查看多线程应用程序的伪代码(假设它是c++中的)。我在main方法中声明vector对象。然后我运行一个线程并将这个对象传递给线程。该线程在另一个处理器中运行。现在,我在向量中插入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
} 
typedef结构myType
{
INTA;
int b;
}myType;
线程例程()
{
在处理器P中运行线程;
在myTypeObject中插入1000000个元素
}
int main()
{
std::vector myTypeObject;
调用线程并传递myTypeObject
} 
我想知道将在哪里为100000个元素分配内存: -从主体本身 -脱线

我问这个问题的原因是,我想在不同的处理器中运行线程。我的机器是NUMA机器。因此,如果内存是从线程分配的,那么它将位于线程的本地内存库中。但是如果内存是从main分配的,那么它将从主线程的本地内存库分配

根据我的直觉,我会说内存只在线程中分配。请告诉我您的想法。

重新分配将从
ThreadRoutine()
调用——因此,无论哪个线程调用它(在您的示例中是次线程)


当然,如果你想避免在二次线程上调整大小,可以在主线程上通过代码> >保留< /C>。< /P>注意,在C++中,你可以写“代码> StuttMyType {…};<代码>。您确定标准分配器仅为特定线程分配内存吗?因为这听起来很不正常,只要看一眼“什么是NUMA”,我就会觉得NUMA通常不是这样工作的。如果我了解NUMA,我认为最好的答案就是编写一个自定义分配器,让向量使用分配器。这样你就不必担心哪根线在支撑它了。或者什么的,好吧。。这就像从线程中调用一个新的操作符,对吗?