一尘不染

线程有不同的堆吗?

linux

据我所知,操作系统创建线程时,每个线程都会获得一个不同的堆栈。我想知道每个线程是否也有与自己不同的堆吗?


阅读 640

收藏
2020-06-02

共1个答案

一尘不染

否。所有线程共享一个公共堆。

每个线程都有一个专用堆栈,它可以快速添加和删除其中的项目。这样可以使基于堆栈的内存速度更快,但是,如果您使用过多的堆栈内存(如无限递归中所发生的那样),则会导致堆栈溢出。

由于所有线程共享同一个堆,因此必须同步对分配器/释放器的访问。有许多避免分配器争用的方法和库。

某些语言允许您创建专用的内存池或单个堆,您可以将其分配给单个线程。

2020-06-02