【发布时间】:2012-08-24 21:05:23
【问题描述】:
我有一个关于 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
}
我想知道为 100000 个元素分配内存的位置: - 从主要本身 - 来自线程
我问这个的原因是,我想在不同的处理器中运行线程。我的机器是NUMA机器。因此,如果内存是从线程分配的,它将在线程的本地内存库中。但是如果内存是从主线程分配的,它将从主线程的本地内存库中分配。
根据我的直觉,我会说内存只在线程中分配。请让我知道你的想法。
【问题讨论】:
-
请注意,在 C++ 中您可以只写
struct myType{...};。 -
您确定标准分配器只为特定线程分配内存吗?因为这听起来很不正常,简单地看一下“什么是 NUMA”让我觉得这不是 NUMA 的正常工作方式。
-
如果我对 NUMA 有所了解,我认为最好的答案就是编写一个自定义分配器,并让向量使用分配器。然后你永远不必担心哪个线程持有它。什么的。
标签: c++ memory memory-management