【问题标题】:Memory allocation for containers in C++C++中容器的内存分配
【发布时间】: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


【解决方案1】:

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

当然,如果您想避免在辅助线程上调整大小,您可以在传递它之前在主线程上reserve

【讨论】:

  • ok.. 所以这就像是从线程中调用一个新的操作员吧?
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2014-06-26
  • 2010-10-24
  • 2014-10-25
  • 2010-12-11
相关资源
最近更新 更多