c++ - 线程分配的内存块是否与线程本身具有相同的亲和性,直到线程退出?
问题描述
这是一个关于 NUMA 的问题。
例如,在下面的代码中,缓冲区是否在线程/进程的整个生命周期中分配在本地内存中?
for (int th = 0; th < maxThreads; th++)
{
threads[th] = std::thread([&, th] {
int* buffer = new int[1000];
// do something
delete []buffer;
}
}
更新:为了让问题更直接,让我这样问。如果我有 10 个同时启动的线程(例如,t0 到 t9),并且在每个线程的范围内,它会分配一个内存块(例如,m0 到 m9)。在线程退出之前,线程 t_n 是否总是在 m_n(n 从 0 到 9)上运行,或者线程 0 可能会迁移并在内存 9 上运行?在我的情况下,内存块不是很大,通常只有几兆字节。
解决方案
我认为这种行为与操作系统的实现有关,但我相信使用 CONFIG_NUMA 选项配置和构建的 Linux,答案是肯定的。
推荐阅读
- r - 构造一个有条件地取某个值直到满足另一个条件的变量
- ruby-on-rails - 如何使用 watir 加载现有的 chrome 配置文件?
- c# - 无法为“Form1.resx”创建清单资源名称;找不到“...Form1.cs”
- c++ - 整数在程序中使用递归算法设置为 -858990820 - 我有点明白为什么,但不确定
- c# - 如何收听 Google API 推送通知?
- python - python中用于算法和数据结构的排序函数
- apache-spark - 如何同时运行 2 个 EMR Spark 步骤?
- mysql - 搜索 mysql 限制以引用超过 2 个级别的顶级查询的解决方法
- sql - T-SQL中一组时间差的总和?
- css - 通过 CSS 实现的 Vaadin Flow/10/11 样式组件