我正在Windows上用C编写一个程序,该程序启动30个线程,每个线程需要一个int16_t
数组。
大小是在调用线程函数之前计算的,在我正在处理的示例中,大小约为2.5亿。这大约是15GB,这应该没问题,因为我有128GB的可用内存。
我尝试在线程函数中同时使用malloc
和calloc
,但是一半以上的分配返回NULL,并且errno
设置为12(enomem
)。
虽然线程数很少(最多3个),但它可以正常工作,如果我只使用1个线程并分配一个不合理的大数组,则效果相同。
我解决该问题的下一个尝试是在主线程中创建一个指针数组,在其中分配数组,并将它们作为参数传递给线程,发生了同样的事情。
因此,从这些结果中,我最好的猜测是它无法分配该大小的连续内存块,因此我还尝试分配了许多较小的数组,这显然也不起作用。这是预期的行为还是我做错了什么?