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

标签 c++ c++11 memory-management std stdlist

当我们对类型为 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/

相关文章:

c++ - 为什么 Bison 中的简单语法规则不起作用?

c++ - 让函数在不指定模板参数的情况下获取指向模板对象的指针

C lang "filter map"实现与免费

c - 强制内存分配始终到相同的虚拟地址

c++ - 在 C++ 11 中将指针传递给临时变量?

MATLAB 帕福尔 : memory management: shared memory or not?

c++ - 用户定义的字符串文字和模式与 sscanf 匹配

c++ - 使用打开的文件流访问违规阅读位置

c++ - 在 {} 范围内声明变量时,它们还会使用内存吗?

c++11 - 在 unique_ptr 上 GMOCK EXPECT_CALL