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

问题描述 投票:1回答:1

当我们在类型为std::listthread_local类型的变量上调用clear时会发生什么?它是否放弃了分配的内存?

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

c++ c++11 memory-management std stdlist
1个回答
6
投票

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

另外,请注意带有标准分配器的std::list为堆上的节点分配空间 - 单个进程范围的堆(也是this question中关于这一点的标准中引用的段落),并且没有关于这些分配的线程本地他们自己。它只是who-list-level数据成员(例如指向第一个节点的指针)的线程本地。

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

© www.soinside.com 2019 - 2024. All rights reserved.