在阅读xv6源代码时,我对以下声明的语法感到困惑。谁能向我解释?
extern struct cpu *cpu asm("%gs:0");
最佳答案
我假设您了解extern struct cpu *cpu
的含义。您的问题是:asm("%gs:0")
部分是什么意思?
该代码使用名为asm labels的gcc扩展来表示变量cpu
由汇编字符串%gs:0
定义。
这不是打算使用此扩展名的方式,而是将其视为hack。
关于gs(和fs)here的讨论非常精彩,但简而言之gs指向当前线程的本地存储。 gs处的数据格式取决于您的操作系统(Windows与Linux有很大不同)。这个特定的代码说,在从gs偏移0
的位置,有一个指向struct cpu
的指针。
关于gcc - 声明“extern struct cpu * cpu asm (“%gs:0”)”是什么?意思是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578898/