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

Does a thread_local std::list give up the allocated memory on calling clear?

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

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

将变量标记为 thread_local 对其在分配内存时的行为没有影响 - AFAIK。所以你应该得到相同的行为w.r.t。使用非限定列表、线程本地列表、静态列表等在 clear() 上取消分配

此外,请注意 std::list 使用标准分配器为其堆上的节点分配 space - 单个进程范围的堆(也引用了 this question 关于这一点),并且这些分配本身没有任何线程局部性。只有 who-list-level 数据成员(例如指向第一个节点的指针)是线程本地的。

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