The*_*ook 1 c++ memory-management std stdlist c++11
当我们调用std::list还带有标记的类型的变量clear时会发生什么thread_local?它会放弃分配的内存吗?
std::list
thread_local
在我的场景中,我有一个thread_local列表,该列表在一次迭代中填充,并在迭代结束时清除。thread_local在我们在迭代结束时放弃内存(并且必须在下一次迭代中再次分配内存)的情况下,这不是很有用吗?
ein*_*ica 6
将变量标记为thread_local-AFAIK-在分配内存时对其行为没有影响。因此,clear()使用不合格列表,线程本地列表,静态列表等时,应该获得与取消分配相同的行为。
clear()
另外,请注意,std::list使用标准分配器为其堆上的节点(单个进程范围的堆)分配空间(关于这一点,也引用了该问题中标准引用的段落),并且这些分配没有线程本地的他们自己。只是线程列表级的谁列表级数据成员(例如,指向第一个节点的指针)。
PS-我不确定该标准实际上是否要求在调用时释放任何内存clear()-但它确实允许这样做,因为此方法的时间复杂度可以是线性的。
归档时间:
6 年,8 月 前
查看次数:
44 次
最近记录: