应该将线程分配给堆栈还是堆?



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

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

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

此经验法则的一个例外是对象相对于堆栈的大小非常大的情况。大型对象需要动态分配。我的系统上std::thread的大小是 8 字节。需要动态分配的对象的确切大小是高度情境化的,但对于绝大多数情况,8 字节足够小(以很大的幅度(存储在堆栈上。

但是,如果在编译时不知道需要多少对象,则需要诉诸动态分配。通常使用标准容器(例如std::vector<std::thread>(。

最新更新