我想知道是否有任何 libc 函数不调用任何 syscall()?例如,对于 libc 函数“strcpy()”,它是否有任何系统调用(让我们考虑所有可能的 linux 系统)。
问问题
613 次
2 回答
5
系统调用在性能方面非常繁重,因为它们意味着将上下文切换到内核中。因此,对于像这样的简单库函数strcpy
(其功能实际上等效于while(*d++ = *s++)
,但可能针对架构进行了优化),系统调用没有任何意义。
请注意,复制期间的页面错误可能会导致内核上下文切换和系统调用的出现,但这不是strcpy
直接调用系统调用的结果。
于 2012-10-07T00:36:50.543 回答
4
系统调用有点像从用户空间(程序运行的地方)到内核空间的接口。当你在做一些只有内核才能做的事情时需要它们,比如与硬件通信(例如从网卡读取字节,启动进程,甚至通过 malloc(使用brk
)分配内存等)。
另一方面,Userland 函数,例如strcpy
,并没有缩进来执行系统调用。他们不需要特殊的权限来做他们所做的事情,他们只是在用户空间中对进程的内存进行操作。
由于系统调用引入了主要的性能损失(将模式从用户更改为内核空间并返回代价高昂),因此strcpy
从设计的角度来看,将它们置于经常调用的函数中是没有意义的,因此不太可能被看到。
于 2012-10-07T00:26:23.470 回答