从寄存器而不是从堆栈读取参数

时间:2012-04-29 19:04:05

标签: linux-kernel parameter-passing

上周,讲师讲述了如何处理linux中的中断,尤其是do_IRQ函数。我想知道为什么do_IRQ函数从寄存器而不是从堆栈中读取其参数。但是教练也不知道这个的原因。现在我仍然想知道为什么像do_IRQ这样的内核函数从寄存器而不是堆栈中读取所需的参数。我用谷歌搜索它,但我只发现函数从寄存器或堆栈中读取它们的参数,但不是原因。

1 个答案:

答案 0 :(得分:0)

从内核2.6开始,所有内核函数都使用寄存器而不是堆栈来传递前3个参数(x86_64中的6个)。
在古老的2.4内核中,只有少数性能关键的函数(如do_IRQ)以这种方式工作。你的导师会教你2.4内核吗?!

在寄存器中传递参数可以提高性能 与内存相比,读取/写入寄存器要快得多(即使它位于L1缓存中)。

在所有情况下,调用者和被调用者都同意参数传递方法非常重要 当函数使用非标准方法时,它会用编译器属性标记 这个属性告诉编译器两件事 - 在编译函数本身时,它知道预期参数的位置,并且在编译调用时,它知道放置它们的位置。