一个线程应该分配到栈还是堆?

Should a Thread be allocated to the stack or heap?

我正在尝试使用 std::thread 库学习 C++ 中的多线程。 我找不到是否应该在堆栈或堆上声明线程; 我尝试使用 google 进行搜索并搜索此站点,但无法获得关于使用两者中的哪一个以及原因的具体答案。

谁能给我解释一下分配线程的最佳用途是什么?

如果您在编译时知道所需的对象数量(std::threads,在这种情况下),那么使用自动变量(多个对象的数组)通常是一个很好的默认选择).自动对象分配在堆栈上。

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

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