thread_local std::list 是否会在呼叫清除时放弃分配的内存



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

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

变量标记为thread_local对分配内存时的行为没有影响 - AFAIK。因此,您应该在具有非限定列表、线程本地列表、静态列表等的clear()上获得相同的行为 w.r.t. 取消分配。

另外,请注意,使用标准分配器的std::list为其堆上的节点分配空间 - 单个进程范围的堆(也是此问题中引用的标准关于这一点的段落(,并且这些分配本身没有任何线程本地。只有谁列表级别的数据成员(例如指向第一个节点的指针(是线程本地的。

PS - 我不确定标准是否真的要求在调用clear()时释放任何内存 - 但它绝对允许这样做,因为这种方法的时间复杂度可以是线性的。

最新更新