我正在尝试使用std :: thread库学习C ++中的多线程。 我找不到是否应该在堆栈或堆上声明线程。 我尝试用google搜索和搜索该站点,但无法获得关于使用这两个以及为什么的具体答案。
有人可以向我解释一下分配线程的最佳用途是什么吗?
答案 0 :(得分:2)
如果在编译时知道所需的对象数量(在这种情况下为std::thread
,那么使用自动变量(多个对象的数组)通常是一个很好的默认选择。自动对象在堆栈上分配。
这种经验法则的例外情况是,对象相对于堆栈的大小而言非常大。大对象需要动态分配。我的系统上std::thread
的大小为8个字节。需要动态分配的对象的确切大小在很大程度上取决于情况,但是在大多数情况下,8字节足够小(有很大的余量)可以存储在堆栈中。
但是,如果您在编译时不知道需要多少个对象,那么您将需要求助于动态分配。通常,使用标准容器(例如std::vector<std::thread>
)。