C++ славится тем что в нем все время стреляют себе в ноги. И как правило это связано с работой с памятью. Но, есть методы которые помогают справиться с этим. Давайте разберем один из методов разбора и сбора пакетов, который был успешно применен как в бекэнде в пользовательском пространстве, так и в ядре macOS для разбора USB пакетов. Метод позволяет работать с пакетами весьма эффективно, при этом обеспечивает полный контроль памяти, и не позволяет случаться таким ошибкам как “выход за границы буфера”.
Этот метод хорошо себя показал в высоконагруженном сервисе передачи видео в реальном времени. А так же драйвере для macOS, где использовался для работы с устройсвами по протоколу поверх USB.
- рассмотрим сам метод.
- как он позволяет структурировать код и доступ к данным.
- какие особенности будут у него в пространстве ядра
- рассмотрим проблематику работы с упакованными структурами
- какой код генерирует компилятор
- рассмотрим особенности связанные с кроссплатформенностью (неприятные сюрпризы от компилятора)