我对C ++上的容器内存分配有疑问。
查看多线程应用程序的伪代码(假设它是在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
}
我想知道为100000个元素分配内存的位置: - 从主要本身 - 从线程
我问这个的原因是因为,我想在不同的处理器中运行该线程。我的机器是NUMA机器。因此,如果从线程分配内存,它将位于线程的本地内存库中。但是如果从main分配内存,它将从主线程的本地内存库中分配。
根据我的直觉,我会说内存只在线程中分配。请让我知道你的想法。
答案 0 :(得分:1)
将从ThreadRoutine()
调用重新分配 - 因此,无论哪个线程调用它(在您的示例中为辅助节点)。
当然,如果你想避免在辅助线程上调整大小,你可以在传递它之前在主线程上reserve
。