在调用clear时,thread_local std :: list是否放弃分配的内存吗?

时间:2019-04-16 17:55:52

标签: c++ c++11 memory-management std stdlist

当我们对类型为std::list且也标记为thread_local的变量调用clear时会发生什么?它会放弃分配的内存吗?

在我的场景中,我有一个thread_local列表,该列表在一次迭代中填充,并在迭代结束时清除。 thread_local在我们在迭代结束前放弃内存(并且必须在下一次迭代中再次分配内存)的情况下不是很有用吗?

1 个答案:

答案 0 :(得分:6)

在分配内存时,将变量标记为thread_local对其行为没有影响-AFAIK。所以你应该得到相同的行为在clear()上取消分配,其中包含不合格列表,线程本地列表,静态列表等。

此外,请注意,带有标准分配器的std::list会为其堆上的节点(单个进程范围的堆)分配空间(这也涉及this question中标准引用的段落) ),并且这些分配本身没有线程本地的。只是线程列表级别的who-list级数据成员(例如,指向第一个节点的指针)。

PS-我不确定该标准实际上是否要求在调用clear()时释放任何内存-但它确实允许这样做,因为此方法的时间复杂度可以是线性的。 / sub>