thread_local未调用函数内变量:是否占用内存及触发初始化?
函数内thread_local变量的内存与初始化问题
核心结论
函数内部声明的thread_local变量,只有当该函数被当前线程第一次调用时,才会完成初始化并分配对应内存。如果函数从未被当前线程执行,这些变量既不会占用该线程的内存,也不会被初始化。
对应示例分析
在你给出的代码场景里:
- 新线程
t的执行逻辑中没有调用lib1_foo()和lib2_bar(),所以:lib1_foo里的a、b,以及lib2_bar里的BigObject c,都不会在t线程中分配内存空间;- 这些变量的初始化流程也不会触发(包括
BigObject的构造函数不会被调用)。
补充说明
从编译器实现的角度来说,这类thread_local变量通常会绑定一个线程本地的初始化标记。当函数被调用时,程序会先检查这个标记:如果变量未初始化,才会为其分配线程本地内存、执行初始化逻辑(比如基本类型的零初始化或自定义对象的构造)。只要函数没被当前线程执行过,这个流程就不会启动,自然不会产生任何内存开销。
内容的提问来源于stack exchange,提问作者rafoo
相关产品推荐
相关产品推荐

