首页 > 解决方案 > 线程应该分配给堆栈还是堆?

问题描述

我正在尝试使用 std::thread 库在 C++ 中学习多线程。我找不到是否应该在堆栈或堆上声明线程;我尝试用谷歌搜索和搜索这个网站,但无法得到关于使用这两者中的哪一个以及为什么使用的具体答案。

有人可以向我解释分配线程的最佳用途吗?

标签: c++memory-managementstdthread

解决方案


如果您在编译时知道所需的对象数量(std::thread在本例中为 s),那么使用自动变量(多个对象的数组)通常是一个很好的默认选择。自动对象在堆栈上分配。

这个经验法则的一个例外是对象相对于堆栈的大小非常大的情况。大对象需要动态分配。我的系统上的大小std::thread是 8 个字节。需要动态分配的对象的确切大小在很大程度上取决于情景,但在绝大多数情况下,8 个字节足够小(有很大的余量)可以存储在堆栈上。

但是,如果您在编译时不知道需要多少对象,那么您将需要求助于动态分配。通常通过使用标准容器(std::vector<std::thread>例如)。


推荐阅读