gpt4 book ai didi

Linux的线程本地存储实现

转载 作者:IT王子 更新时间:2023-10-29 00:13:22 26 4
gpt4 key购买 nike

__thread Foo foo;

“foo”实际上是如何解析的?编译器是否默默地用函数调用替换了“foo”的每个实例? “foo”是否存储在相对于堆栈底部的某个位置,并且编译器将其存储为“嘿,对于每个线程,在堆栈底部附近都有这个空间,并且 foo 存储为'从堆栈底部偏移 x' “?

最佳答案

有点复杂(this document 解释得很详细),但基本上两者都不是。相反,编译器在可执行文件中放置了一个特殊的 .tdata 部分,其中包含所有线程局部变量。在运行时,为每个线程创建一个新的数据部分,其中包含(只读).tdata 部分中的数据副本,并且在运行时切换线程时,该部分也会自动切换。

最终结果是 __thread 变量与常规变量一样快,而且它们也不会占用额外的堆栈空间。

关于Linux的线程本地存储实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com