«1 + 2» в C ++ напрямую переводится в add
инструкцию по сборке, которая выполняется непосредственно на CPU. Все «слои», на которые вы ссылаетесь, действительно вступают в игру только тогда, когда вы начинаете вызывать библиотечные функции. Например, простой printf("Hello World\n");
будет проходить через несколько слоев (на примере Windows разные ОС будут отличаться):
- CRT - среда выполнения C реализует такие вещи, как замены% d, и создает одну строку, а затем вызывает
WriteFile
в kernel32
- kernel32.dll реализует
WriteFile
, замечает, что дескриптор является консолью, и направляет вызов в консольную систему
- строка отправляется процессу conhost.exe (в Windows 7, csrss.exe в более ранних версиях), который фактически содержит окно консоли
- conhost.exe добавляет строку во внутренний буфер, который представляет содержимое окна консоли, и делает недействительным окно консоли
- Диспетчер окон замечает, что окно консоли теперь недействительно, и отправляет ему сообщение WM_PAINT
- В ответ на WM_PAINT, окно консоли (по-прежнему внутри conhost.exe) выполняет серию
DrawString
вызовов внутри GDI32.dll (или, возможно, GDI +?)
- Метод
DrawString
перебирает каждый символ в строке и:
- Поиск определения глифа в файле шрифта для получения контура глифа
- Проверяет, находится ли кэш для визуализированной версии этого символа с текущим размером шрифта
- Если глифа нет в кеше, он растеризует контур с текущим размером шрифта и кеширует результат на потом
- Копирует пиксели из растеризованного глифа в указанный вами графический буфер, попиксельно
- Как только все вызовы
DrawString
завершены, окончательное изображение для окна отправляется в DWM, где оно загружается в графическую память вашей видеокарты, и заменяет старое окно
- Когда рисуется следующий кадр, видеокарта теперь использует новое изображение для рендеринга окна консоли, и ваша новая строка там
Теперь есть много слоев, которые я упростил (например, способ, которым видеокарта рендерит вещи, представляет собой целый «другой слой абстракций»). Возможно, я допустил некоторые ошибки (я, конечно, не знаю, как реализована Windows), но, надеюсь, это даст вам представление.
Важным моментом, однако, является то, что каждый шаг на этом пути добавляет какую-то ценность для системы.