c - 线程有不同的堆吗?

标签 c windows linux multithreading stack

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

最佳答案

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

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

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

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

关于c - 线程有不同的堆吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1665419/

相关文章:

使用 Flex 计算行数

c# - 为什么我不能使用 Windows.Phone.Media.Capture 命名空间?

python - Windows 命名管道实践

c - 如何在 Linux 中将套接字链接到 PID?

linux - 如何通过 docker cp 复制目录?

c - 如何在 macOS 中检索操作系统版本详细信息和所有网络适配器信息?

c - UNIX:recv 的内存问题 - malloc.c:3096:sSYSMALLOC:断言

linux - 为什么 i2cset 会发送额外的字节?

c - 在 C 中正确操作宽字符/字符串

windows - Capistrano 部署问题