据我所知,当操作系统创建线程时,每个线程都会获得一个不同的堆栈。我想知道每个线程是否也有一个与自己不同的堆?
最佳答案
没有。所有线程共享一个公共(public)堆。
每个 thread has a private stack ,它可以快速添加和删除项目。这使得基于堆栈的内存快速,但是如果你使用太多的堆栈内存,就像在无限递归中发生的那样,你会得到堆栈溢出。
由于所有线程共享同一个堆,对分配器/释放器的访问必须同步。有多种方法和库可以避免 allocator contention .
某些语言允许您创建私有(private)内存池或单独的堆,您可以将它们分配给单个线程。
关于c - 线程有不同的堆吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665419/