【问题标题】:__thread c++ memory leak__thread C++ 内存泄漏
【发布时间】:2021-08-15 10:07:47
【问题描述】:

我有这样的 A 类:


class A {
  static __thread Arena * arena;
}

如果一个线程被销毁或者直接退出,arena占用的内存会被释放吗?

【问题讨论】:

  • 请不要将 c++ 问题标记为 c,它们是不同的语言
  • __thread 不是标准 C++,所以你应该说明你使用的是什么编译器。

标签: c++ memory-leaks thread-local


【解决方案1】:

arena 使用的内存将被释放,但它指向的任何内容都不会被释放。

使用 c++11 的 thread_local 代替智能指针,例如

class A {
  thread_local std::unique_ptr<Arena> arena;
}

【讨论】:

  • 使用thread_localarena 析构函数将在线程退出时被调用。我认为旧的特定于编译器的 __thread 关键字不是这种情况。
  • @prapin 我认为你是对的,尽管我在文档中找不到太多内容
猜你喜欢
  • 2016-01-27
  • 2010-11-11
  • 2017-02-18
  • 1970-01-01
  • 2015-11-19
  • 2014-11-01
  • 2020-03-31
  • 2016-03-15
  • 2015-07-25
相关资源
最近更新 更多