О надёжности компьютерного программного обеспечения

А сейчас я наткнулся на интересное, по существу, признание о том, что некоторые широко распространённые программистские практики считаются слишком рискованными, чтобы их можно было применять в системах, требующих высочайшей надежности:
Besides, I was trained to never use the heap/malloc in embedded systems. Most coding standards for critical aerospace systems http://www2.research.att.com/~bs/JSF-AV-rules.pdf 1 and motor vehicle coding standards like MISRA have statements like this:Здесь, по существу, говорится, что динамическое выделение оперативной памяти (RAM) запрещено в аэрокосмических системах и в программном обеспечении автомобилей, а такое выделение -- краеугольный камень пресловутого объектно-ориентированного программирования, например, на языках вроде C++. Проблема с динамическим выделением памяти, то есть с ситуацией, когда программный код сам вычисляет, сколько дополнительной памяти ему требуется в данный момент, состоит в том, что невозможно оценить тот максимум потребной памяти, которая может быть запрошена в процессе исполнения программы, а этот максимум может превысить доступную память, что приведёт к аварийному -- неуправляемому и неисправляемому -- состоянию программы.
MISRA C++ rule 18-4-1, dynamic heap memory allocation cannot be used.
Другая проблема с динамическим выделением памяти -- так называемая "утечка памяти", когда процессы занимают память как бы на время, но "забывают" её освобождать, создавая растущее количество сегментов "мертвой" памяти, то есть памяти, выключенной из оборота, что, в свою очередь, может привести к аварийному останову из-за недостатка доступной памяти. Кстати, я сейчас пишу это в браузере Firefox, который с течением времени занимает всё больше и больше памяти, доходя до гигабайтов, что, как минимум, может сильно замедлить другие процессы.
|
</> |