gpt4 book ai didi

linux - 网络系统调用在 x86 上多路复用,但在 x64 上没有

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:06 24 4
gpt4 key购买 nike

我是 reading an article关于如何在 x86 上进行与网络相关的系统调用,我看到这些调用是通过单个系统调用“socketcall”进行多路复用的。这种额外层次结构的原因似乎是为了保存系统调用号。

快速浏览一下 x64,情况似乎并非如此。为什么会这样? x86 处理器中的每个寄存器都是 32 位长,存储更大的系统调用号值应该没有问题;那么 socketcall 没有在 x64 上实现的原因是什么?

最佳答案

纯粹的推测,但在某些具有少量寄存器的体系结构(如 x86)上,超过一定数量参数的函数无法有效地将所有参数直接传递到寄存器中(对于 x86,这大约是 6 个)。例如,sendto 和 recvfrom 将 6 + 1 作为系统调用号。在这一点上,传递一个指向 long 数组的指针更有效,至于其他参数小于阈值的指针,我猜这是一个方便和相关函数之间代码共享的问题。

关于linux - 网络系统调用在 x86 上多路复用,但在 x64 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23828239/

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