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

标签 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;
}

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

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

最佳答案

不,一点也不。我不确定您对系统调用的定义是否正确。从维基百科窃取定义:

In computing, a system call is how a program requests a service from an operating system's kernel.

这意味着导致系统调用的操作类型是 I/O、计时等——不是数学、赋值、(大多数)内存赋值、...

即使 malloc() 通常也会实现,因此您并不总是需要系统调用。一般而言:只有影响程序的周围环境或与其交互的操作才需要系统调用。寄存器、程序变量等不算作周围环境的一部分。

关于c++ - 程序中的每一行(变量声明除外)最终都会使用至少一个系统调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507646/

相关文章:

c++ - 如何在现有文件中插入文本?

c++ - MFC中背景绘制到位图的线程类型

c++ - boost::transform_iterator 和 boost::bind

c - 如何在 C 中嗅探数据包时查找 TCP 重传

c - 如何计算结构成员和填充的大小?

iOS 框架和重复库

c++ - 使用在派生类中声明为纯虚拟的方法

c - 编译器大小

c# - 调用者的编译时验证,或者是否可以扩展 C# 编译器?

c++ - 带循环的宏在 C/C++ 中的实际工作方式