gpt4 book ai didi

c++ - 非静态全局变量与全局静态 __thread 变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:34 28 4
gpt4 key购买 nike

如果我在全局范围内定义一个静态 __thread 变量,它是否等同于常规的非静态全局变量?也就是说,如果以下两个变量都在全局范围内,它们是否等价:

int regular_global_int;
static __thread int static_thread_local_int;

如果答案是否定的,我能知道这两者之间的主要区别是什么以及我应该在什么时候使用哪一个吗?

最佳答案

全局变量,更普遍的命名空间范围变量,在未使用存储类说明符声明时自动具有静态存储持续时间。在命名空间范围内,static 并不意味着“静态存储持续时间”;这意味着变量具有内部链接。因此

int x;
static int x;

在命名空间范围内都声明了具有静态存储持续时间的 x 但是这两个声明仍然不一样,因为第一个声明给出了 x 外部链接,而第二个声明给出了内部链接链接。

在你写的情况下

static thread_local int x;

thread_local 存储类说明符导致 x 具有线程本地存储持续时间(而不是静态存储持续时间),而 static 本身又具有它在命名空间范围内的通常含义。所以 x 是线程局部的并且它有内部链接。

关于c++ - 非静态全局变量与全局静态 __thread 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962707/

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