gpt4 book ai didi

c - 为什么 Linux 不遵循 Unix 系统调用约定?

转载 作者:IT王子 更新时间:2023-10-29 00:38:51 26 4
gpt4 key购买 nike

我正在自学 Linux 汇编语言,我发现 BSD 和 Linux 之间有一个有趣的区别。在 Unix 中,在调用 80h 中断之前将系统调用参数压入堆栈;相比之下,在 Linux 中,您在寄存器中传递参数。

有谁知道 Linux 开发人员使用寄存器而不是堆栈的基本原理是什么?

注意:这里有一个很好的页面详细说明了这种差异:FreeBSD Developer's Handbook:System Calls不解释理由。

最佳答案

系统调用约定不同是因为标准函数调用顺序不同。我假设您在谈论 x86-32 调用约定和 AMD64 调用约定之间的区别。您可以查看 AMD64 ABI here .

但如果您想快速进入正题,请查看 this邮政。基本上它是关于速度的。通过更改调用约定并使用寄存器而不是堆栈,您可以减少调用序言和结尾中的指令。

关于c - 为什么 Linux 不遵循 Unix 系统调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520778/

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