c++ 中的每个线程都有自己的内存分配限制吗?

Does Each thread in c++ has its own memory allocation limits

本文关键字:分配 内存 自己的 线程 c++      更新时间:2023-10-16

我正在创建一个线程。但是当我尝试在线程调用的函数中分配一些内存时,我得到了std::bad_array_new_length异常。现在,我可以从htop看到,我仍然有可用内存(总共~100 Gb)。此外,当我在主线程中调用相同的函数时,代码有效。

这是我用来生成单个线程的代码:

#include <thread>
vector<thread> threads;
for(int i=0; i<1; i++ ) 
    threads.push_back(thread(my_func, param1, param2));
for(_int i=0; i<threads.size(); i++)
    threads[i].join();

我这里有两个问题:线程是否有自己的内存限制(如在堆栈空间中)。如果是,如何让它将整个内存视为自己的内存?

堆在所有

线程之间共享(尽管像 TCMalloc 这样的分配器利用特定于线程的堆子集进行短期分配以提高效率)。 但是,bad_array_new_length与内存耗尽无关:而是与不可能大或负的分配请求有关。