c - 注册为线程局部变量

标签 c linux x86-64

在gcc中你可以声明一个线程局部变量,例如,如下所示。

__thread long thread_local_variable;

另外,在gcc中你可以指定一个变量来使用某个寄存器,例如,如下所示。

long register_variable asm ("r15" );

我想把这两个概念结合起来,就是想声明一个使用某个寄存器的线程局部变量。我怎样才能做到这一点?

最佳答案

您不需要做任何特别的事情。你的例子:

long register_variable asm ("r15" );

已经声明了一个线程局部变量,仅仅是因为每个线程都有自己的一组寄存器值。

没有办法让 GCC 的全局寄存器存储变量在线程之间共享。这一点没有得到很好的记录,这一事实说明了寄存器存储全局变量的整个想法是多么的欠考虑和骇人听闻......

关于c - 注册为线程局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995130/

相关文章:

c - 当文件未按预期 100% 填充时,无法使用 C 从二进制文件读取结构

linux - Posix 消息队列和命令行?

linux - 在运行时将代码注入(inject)可执行文件

linux-kernel - 为什么 x86-64 Linux 系统调用使用 6 个寄存器集工作?

gcc - 如何在GNU汇编器中将函数或标签的地址加载到寄存器中

c - 打印数组时出现段错误

比较两个字符导致超时 : the monitored command dumped core

c - 如何用kmalloc进行数据结构对齐?

linux - read -a 在 Bash 中没有按预期工作

c++ - 向串行端口发送和接收 int 值