C++ 线程\本地std::list是否在调用clear时放弃分配的内存?
当我们调用std::list类型的变量(该变量也被标记为thread\u local)时会发生什么?它会放弃分配的内存吗C++ 线程\本地std::list是否在调用clear时放弃分配的内存?,c++,c++11,memory-management,std,stdlist,C++,C++11,Memory Management,Std,Stdlist,当我们调用std::list类型的变量(该变量也被标记为thread\u local)时会发生什么?它会放弃分配的内存吗 在我的场景中,我有一个线程本地列表,我在一次迭代中填充该列表,并在迭代结束时清除该列表。在我们在迭代结束时放弃内存,并且必须在下一次迭代中再次分配内存的情况下,线程\u local不是很有用吗?将变量标记为线程\u local对其分配内存时的行为没有影响。因此,对于非限定列表、线程本地列表、静态列表等,您应该在clear上获得相同的行为w.r.t.取消分配 另外,请注意,带有
在我的场景中,我有一个线程本地列表,我在一次迭代中填充该列表,并在迭代结束时清除该列表。在我们在迭代结束时放弃内存,并且必须在下一次迭代中再次分配内存的情况下,线程\u local不是很有用吗?将变量标记为线程\u local对其分配内存时的行为没有影响。因此,对于非限定列表、线程本地列表、静态列表等,您应该在clear上获得相同的行为w.r.t.取消分配 另外,请注意,带有标准分配器的std::list为其堆上的节点分配空间——单个进程范围的堆也是关于这一点的标准中引用的段落,这些分配本身没有线程本地性。它只是who列表级别的数据成员,例如指向线程本地的第一个节点的指针
PS-我不确定该标准是否要求在调用clear时释放任何内存-但它确实允许这样做,因为该方法的时间复杂度可以是线性的。将变量标记为thread_local对其分配内存时的行为没有影响。因此,对于非限定列表、线程本地列表、静态列表等,您应该在clear上获得相同的行为w.r.t.取消分配 另外,请注意,带有标准分配器的std::list为其堆上的节点分配空间——单个进程范围的堆也是关于这一点的标准中引用的段落,这些分配本身没有线程本地性。它只是who列表级别的数据成员,例如指向线程本地的第一个节点的指针
PS-我不确定该标准是否要求在调用clear时释放任何内存-但它确实允许这样做,因为该方法的时间复杂度可以是线性的。在我的场景中,我有一个线程本地列表,我在一次迭代中填充该列表,并在迭代结束时清除。为什么需要是线程本地的?假设这是一个堆栈变量,那么为什么它是线程本地的呢?你确定你需要线程本地列表吗?很好。我可能不需要它,因为thread_local在我的场景中,我有一个thread_local列表,我在一次迭代中填充它,并在迭代结束时清除它。为什么需要是线程本地的?假设这是一个堆栈变量,那么为什么它是线程本地的呢?你确定你需要线程本地列表吗?很好。我可能不需要它作为本地线程