Я работал в среде DO-178B (системы для самолетов). Что я понял, так это то, что основной причиной, по которой динамическое распределение не разрешается, является в основном сертификация. Сертификация проводится с помощью тестов (унитарных, покрытия, интеграции, ...). С помощью этих тестов вы должны доказать, что поведение вашей программы на 100% предсказуемо, почти до такой степени, что объем памяти вашего процесса остается одинаковым при каждом выполнении. Поскольку динамическое распределение выполняется в куче (и может произойти сбой), вы не можете легко доказать это (я полагаю, это будет возможно, если вы освоите все инструменты от аппаратного обеспечения до любого написанного фрагмента кода, но ...). У вас нет этой проблемы со статическим размещением. Вот почему C ++ не использовался в настоящее время в таких средах. (это было около 15 лет назад, что могло измениться ...)
Практически, вы должны написать много структурных пулов и функций выделения, которые гарантируют, что у вас есть что-то детерминированное. Вы можете представить множество решений. Ключ в том, что вы должны доказать (с ТОННАМИ тестов) высокий уровень детерминированного поведения. Проще доказать, что ваша ручная работа над разработкой работает детерминистически, чем доказать, что linux + gcc является детерминистическим в распределении памяти.
Только мои 2 цента. Это было давно, все могло измениться, но в отношении сертификации, такой как DO-178B, важно доказать, что ваше приложение будет работать одинаково в любое время и в любом контексте.