Будет ли каждая строка в программе (кроме объявлений переменных) в конечном итоге использовать хотя бы один системный вызов? - PullRequest
1 голос
/ 22 сентября 2011

Я думал о системных вызовах и коде, который мы пишем! Допустим, у меня есть программа, как показано ниже

#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, предоставляемых языком, будет использовать системный вызов для выполнения функции. Я не уверен, правильно ли мое понимание. Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 2 ]

15 голосов
/ 22 сентября 2011

Нет, совсем нет.Я не уверен, что вы правильно поняли системный вызов.Похищение определения из Википедии:

В вычислениях системный вызов - это то, как программа запрашивает службу у ядра операционной системы.что приводит к системным вызовам: ввод / вывод, синхронизация и т. д. - не математика, назначения, (большинство) назначений памяти, ...

Даже malloc() обычно выполняется такне всегда нужен системный вызовВ целом: только действия, которые влияют или взаимодействуют с окружением программы , требуют системного вызова.Регистры, программные переменные и т. Д. Не считаются частью окружающей среды.

4 голосов
/ 22 сентября 2011

Если добавить ответ Ethereal, даже если вы имеете в виду «вызов» (как в функции), а не «системный вызов», ответ по-прежнему нет.Например, c=a+b может генерировать встроенную сборку, аналогичную следующей псевдосборке:

mov reg1, [a]
mov reg2, [b]
add reg1, reg2
mov [c], reg1

Нет необходимости в вызовах!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...