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