据我所知,操作系统创建线程时,每个线程都会获得一个不同的堆栈。我想知道每个线程是否也有与自己不同的堆吗?
否。所有线程共享一个公共堆。
每个线程都有一个专用堆栈,它可以快速添加和删除其中的项目。这样可以使基于堆栈的内存速度更快,但是,如果您使用过多的堆栈内存(如无限递归中所发生的那样),则会导致堆栈溢出。
由于所有线程共享同一个堆,因此必须同步对分配器/释放器的访问。有许多避免分配器争用的方法和库。
某些语言允许您创建专用的内存池或单个堆,您可以将其分配给单个线程。