Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 线程\本地std::list是否在调用clear时放弃分配的内存?_C++_C++11_Memory Management_Std_Stdlist - Fatal编程技术网

C++ 线程\本地std::list是否在调用clear时放弃分配的内存?

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.取消分配 另外,请注意,带有

当我们调用std::list类型的变量(该变量也被标记为thread\u local)时会发生什么?它会放弃分配的内存吗


在我的场景中,我有一个线程本地列表,我在一次迭代中填充该列表,并在迭代结束时清除该列表。在我们在迭代结束时放弃内存,并且必须在下一次迭代中再次分配内存的情况下,线程\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列表,我在一次迭代中填充它,并在迭代结束时清除它。为什么需要是线程本地的?假设这是一个堆栈变量,那么为什么它是线程本地的呢?你确定你需要线程本地列表吗?很好。我可能不需要它作为本地线程