Самая большая проблема с STL во встроенных системах - это проблема выделения памяти (которая, как вы сказали, вызывает много проблем).
Я бы серьезно занялся созданием собственного управления памятью, основанного на переопределении операторов new / delete. Я почти уверен, что со временем это может быть сделано, и это почти наверняка того стоит.
Что касается вопроса об исключениях, я бы туда не пошел. Исключения - это серьезное замедление вашего кода, поскольку они заставляют каждый отдельный блок ({ }
) иметь код до и после, что позволяет перехватывать исключение и уничтожать любые содержащиеся в нем объекты. У меня нет точных данных по этому вопросу, но каждый раз, когда я сталкивался с этой проблемой, я видел убедительные доказательства огромного замедления, вызванного использованием исключений.
Edit:
Поскольку многие люди писали комментарии о том, что обработка исключений не медленнее, я решил добавить эту небольшую заметку (спасибо тем, кто написал это в комментариях, я подумал, что было бы хорошо добавить это здесь).
Причина, по которой обработка исключений замедляет ваш код, заключается в том, что компилятор должен удостовериться, что каждый блок ({}
), от места, где выбрасывается исключение, до места, с которым он обрабатывается, должен освобождать любые объекты внутри него. Это код, который добавляется к каждому блоку, независимо от того, генерирует ли кто-либо исключение или нет (поскольку компилятор не может сказать во время компиляции, будет ли этот блок частью "цепочки" исключений).
Конечно, это может быть старый способ делать вещи, которые стали намного быстрее в новых компиляторах (я не совсем в курсе оптимизаций компилятора C ++). Лучший способ узнать это - просто запустить пример кода с включенными и выключенными исключениями (включающими несколько вложенных функций) и вычислить разницу во времени.