当我们调用 clear 时会发生什么 std::list
类型的变量也标记为 thread_local
?它会放弃分配的内存吗?
在我的场景中,我有一个thread_local
列表,我在一次迭代中填充该列表,并在迭代结束时清除。在这种情况下,thread_local
不是很有用,因为我们在迭代结束时放弃了内存(并且必须在下一次迭代中再次分配内存(?
变量标记为thread_local
对分配内存时的行为没有影响 - AFAIK。因此,您应该在具有非限定列表、线程本地列表、静态列表等的clear()
上获得相同的行为 w.r.t. 取消分配。
另外,请注意,使用标准分配器的std::list
为其堆上的节点分配空间 - 单个进程范围的堆(也是此问题中引用的标准关于这一点的段落(,并且这些分配本身没有任何线程本地。只有谁列表级别的数据成员(例如指向第一个节点的指针(是线程本地的。
PS - 我不确定标准是否真的要求在调用clear()
时释放任何内存 - 但它绝对允许这样做,因为这种方法的时间复杂度可以是线性的。