Для чего хорош Си? | OTUS

Для чего хорош Си?

Язык программирования Си используют в случаях, когда код тесно взаимодействует с «железом». Чаще всего его применяют для решения сложных и специфических задач, что неудивительно, ведь более легкие задачи проще решать с помощью высокоуровневых языков. В этой статье мы рассмотрим несколько популярных применений Си.

Для начала, скажем, что под влиянием Си возникли такие языки, как C#, C++, Java, Objective-C. Да, порой Си называют подмножеством C++ («C++ без классов»), однако на деле это не совсем верно и вот почему.

Разумеется, Си поддерживает лишь процедурное программирование, то есть никаких классов, ООП и наследования — исключительно структуры и функции. Отсюда вытекают основные особенности языка: • доступ к памяти через указатели (указатели — это особые переменные, в которых хранится адрес объекта); • активное применение структур и объединений; • чистый стиль программирования (код сложнее писать, однако проще выполнять отладку).

Теперь давайте приведем несколько популярных примеров использования Си.

Оптимизация участков кода на C++

ООП-возможности C++ нередко обходятся дороже, чем «чистый Си», ведь расходуется больше ресурсов, той же оперативной памяти. Именно поэтому иногда код, написанный в стиле Си, бывает эффективнее. Если же надо заставить работать быстрее какой-нибудь алгоритм, можно задействовать процедурный стиль и отказаться от встроенных ООП-инструментов C++, к примеру, от полиморфизма.

Однако если требуется действительно высокая скорость, то лучше всего переписать часть кода на ассемблере.

Информационная безопасность

Речь идет о следующих хакерских приемах: • применение уязвимостей: переполнение буфера, повреждение кучи (двойные удаления); • инъекция кода. Если заполучить доступ к другому процессу с помощью уязвимости, можно спрятать собственный код внутри чужого, а потом заставить процесс его выполнять; • перехват. Если хотите мониторить чьи-либо взаимодействия с системой (открытие файлов, нажатие клавиш), вам, скорее всего, надо вызывать отслеживающий код каждый раз, когда пользователь что-либо делает. Для этого вы меняете какой-нибудь фрагмент API операционной системы вашим собственным кодом.

Практически для всего вышесказанного применяется PIC-код, то есть код, не зависящий от адреса (position-independent code). Такой код может выполняться в любом месте памяти вне зависимости от того, где он находится и кто его запустил. При этом у PIC-кода отсутствует доступ к глобальным переменным и таблицам, а это значит, что C++ для его написания не подходит, ведь классам C++ требуются для реализации наследования глобальные таблицы.

Код ядра

Код, выполняемый в режиме ядра, имеет полный доступ к оборудованию и памяти: жесткому диску, RAM, GPU. Что работает в режиме ядра: • аппаратные драйверы — тут без доступа к железу не обойтись. Такие драйверы — это посредники между пользовательским кодом и оборудованием; • ядро ОС. На Си написано много ядер ОС, включая Unix и Android.

Применять для вышесказанного C++ почти нереально, ведь в режиме ядра отсутствует доступ к тем же вышеупомянутым глобальным таблицам. Порой в режиме ядра тоже нужен PIC код, к примеру, для загрузчика. Загрузчик — самая первая программа, которая выполняется при запуске персонального компьютера. Биос извлекает эту программу из жесткого диска, помещает в память и приказывает процессору запустить данную часть памяти.

Embedded-разработка

Если говорить о программировании встраиваемых систем, то тут нередко применяют и Си, и C++. Однако у Си есть преимущество, ведь он дает возможность разрабатывать встроенное ПО в случае ограниченных ресурсов, к примеру, если у микроконтроллера слишком мало RAM. Кроме Си, также может понадобиться и знание ассемблера (например, ARM-ассемблера), что неплохо для написания ассемблерных вставок. Результат — еще большая оптимизация кода и получение доступа к специфичным инструкциям процессора.

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Запланируй обучение с выгодой!
Получи скидку 10% на все курсы ноября и декабря до 17.11 →