【发布时间】:2014-08-27 14:39:28
【问题描述】:
Linux 内核 0.12 中的代码 sn-p 使用如下函数参数:
int do_signal(int signr, int eax /* other parameters... */) {
/* ... */
*(&eax) = -EINTR;
/* ... */
}
代码的目的是将 -EINTR 放入 eax 所在的内存中,但我不知道为什么如果只是分配给 eax 它将不起作用:
eax = -EINTR
编译器如何区分 eax 和 *(&eax)?
【问题讨论】:
-
你能给我们提供那个内核源的链接吗?或添加函数的完整定义(如果它不太长)。
-
可能是为了防止编译器对eax使用寄存器,强制它使用栈上的内存。
-
@KlasLindbäck:很好!!!你应该把它写下来,因为它可能是正确的答案(
eax这个名字实际上暗示这就是原因)。 -
@barakmanos Shafik Yaghmour 已经发布了一个很好的答案,其中引用了标准中的相关部分,所以我只会赞成他的答案。