Linux's thread local storage implementation

后端 未结 1 1521
盖世英雄少女心
盖世英雄少女心 2020-12-07 20:37
__thread Foo foo;

How is \"foo\" actually resolved? Does the compiler silently replace every instance of \"foo\" with a function call? Is \"foo\" s

相关标签:
1条回答
  • 2020-12-07 21:19

    It's a little complicated (this document explains it in great detail), but it's basically neither. Instead the compiler puts a special .tdata section in the executable, which contains all the thread-local variables. At runtime, a new data section for each thread is created with a copy of the data in the (read-only) .tdata section, and when threads are switched at runtime, the section is also switched automatically.

    The end result is that __thread variables are just as fast as regular variables, and they don't take up extra stack space, either.

    0 讨论(0)
提交回复
热议问题