c++ - 线程分配的内存块是否与线程本身具有相同的亲缘关系,直到线程退出?

标签 c++ multithreading memory allocation numa

这是一个关于 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,答案是肯定的。

NUMA on Linux

关于c++ - 线程分配的内存块是否与线程本身具有相同的亲缘关系,直到线程退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51128413/

相关文章:

在所有其他大小都合适后,构建大小为 520010 的 float 组会使我的代码崩溃

c++ - LoadString 是否为其写入的字符串分配内存?

java - 将 unicode 文件 help.htm 加载到主线程中的 webview 中

java - java中的同步——new ReentrantLock(true)和new ReentrantLock(false)产生相同的结果?

c# - 在dm_exec_requests中标识特定线程的条目

c - 设置指针值时出现段错误

iPhone - dealloc - Release vs. nil

c++ - 这是一个有效的 Copy Ctor 吗?

c++ - 迭代器在最后一个元素上返回 "Junk"

c++ - 绑定(bind)两个参数