ano*_*non 29 linux multithreading gcc thread-local-storage
__thread Foo foo;
Run Code Online (Sandbox Code Playgroud)
"foo"如何实际解决?编译器是否以函数调用静默替换"foo"的每个实例?"foo"存储在相对于堆栈底部的某处,并且编译器将其存储为"嘿,对于每个线程,将此空间放在堆栈底部附近,并将foo存储为'堆栈底部的偏移x' "?
Dea*_*ing 34
它有点复杂(本文档详细解释了它),但它基本上都没有.而是编译器在可执行文件中放置一个特殊的.tdata部分,其中包含所有线程局部变量.在运行时,使用(只读).tdata部分中的数据副本创建每个线程的新数据部分,并且在运行时切换线程时,该部分也会自动切换.
最终结果是__thread变量和常规变量一样快,并且它们也不占用额外的堆栈空间.
| 归档时间: |
|
| 查看次数: |
14821 次 |
| 最近记录: |