程序中的每一行(变量声明除外)最终都会使用至少一个系统调用吗?

Kar*_*ick 1 c c++ compiler-construction operating-system system-calls

我正在考虑系统调用和我们编写的代码!假设我有一个类似下面的程序

#include<stdio.h>
int main()
{
   int a=0,b=2,c;
   c=a+b;
   printf("The value of c is %d", c);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

让我们以c = a + b为例; 如果它是c ++编译器,那么我相信会有一个对operator +()函数的调用.编译器可以通过将其替换为在汇编代码中执行加法而不是函数调用的实际代码来优化它.

而且printf必须使用系统调用才能将其写入不同的硬件缓冲区.所以我相信语言提供的大多数api将使用系统调用来完成功能..我不确定我的理解是否正确.如果我错了,请纠正我.

Eth*_*eal 15

一点都不.我不确定你是否正确定义了系统调用.窃取维基百科的定义:

在计算中,系统调用是程序如何从操作系统的内核请求服务.

这意味着导致系统调用的操作类型是I/O,定时等 - 而不是数学,赋值,(大多数)内存分配,......

甚至malloc()通常都会实现,因此您并不总是需要系统调用.通常:只有影响程序周围环境或与之交互的操作才需要进行系统调用.寄存器,程序变量等不算作周围环境的一部分.

  • +1明确的答案,避免误导,而不是不必要的细节. (2认同)