#1 楼
简短的答案是syscall
的开销比int 0x80
的开销小。 有关这种情况的更多详细信息,请参阅对Intel x86 vs x64系统调用的公认答案,其中提出了几乎相同的问题:
有人告诉我,syscall比生成软件中断更轻松,更快捷。为什么在x64上它比x86快,我可以使用int 80h在x64上进行系统调用吗?
另请参见:
Intel P6 vs P7系统调用性能
此电子邮件线程讨论了与
int 0x80
相关的开销导致的某些Intel CPU的观察到的速度下降Linux 2.6中基于Sysenter的系统调用机制
发现该软件中断方法[int 0x80]在Pentium IV处理器上要慢得多。为解决此问题,Linus实现了一种替代的系统调用机制,以利用所有Pentium II +处理器提供的SYSENTER / SYSEXIT指令。
Linux内核,4.6 Sysenter和vsyscall页面(2003)
在某些任务上,发现2 GHz奔腾4比850 MHz奔腾III慢得多,并且这种缓慢是由奔腾4上传统
int 0x80
中断的开销很大。某些i386系列型号确实有更快的进入内核的方法。在奔腾II上有sysenter
指令。 AMD也有syscall
指令。