c - 线程有不同的堆吗?

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

最佳答案

没有。所有线程共享一个公共(public)堆。

每个 thread has a private stack ,它可以快速添加和删除项目。这使得基于堆栈的内存快速,但是如果你使用太多的堆栈内存,就像在无限递归中发生的那样,你会得到堆栈溢出。

由于所有线程共享同一个堆,对分配器/释放器的访问必须同步。有多种方法和库可以避免 allocator contention .

某些语言允许您创建私有(private)内存池或单独的堆,您可以将它们分配给单个线程。

https://stackoverflow.com/questions/1665419/

相关文章:

python - 多处理:如何在类中定义的函数上使用 Pool.map?

linux - 抑制makefile中命令调用的回声?

linux - 如何在 linux 上监控进程的线程数?

python - 如何量化两个图像之间的差异?

linux - 创建 .tar.gz 文件时排除目录

python - 无法使用 Ctrl-C 终止 Python 脚本

python - 如何更改绘图背景颜色?

python - 在 Python 2.6 中不推荐使用 BaseException.message

python - 如何让 Flask 在端口 80 上运行?

linux - 在 bash 中检查当前分区的可用磁盘空间