Как происходит динамическое распределение памяти, когда требуется чрезвычайная надежность? - PullRequest
4 голосов
/ 16 марта 2010

Похоже, что динамическое выделение памяти без сбора мусора - это путь к катастрофе. Там висят указатели, здесь течет память. Очень легко внедрить ошибку, которую иногда трудно найти и которая имеет серьезные последствия.

Как решаются эти проблемы при написании критически важных программ? Я имею в виду, что если я напишу программу, которая управляет космическим кораблем, например Voyager 1 , который должен работать годами и оставить небольшую утечку, утечка может накопиться и остановить программу рано или поздно, а когда это произойдет, она переходит в эпическую потерпеть неудачу.

Как происходит динамическое распределение памяти, когда программа должна быть чрезвычайно надежной?

Ответы [ 4 ]

4 голосов
/ 16 марта 2010

Обычно в таких случаях память не будет выделяться динамически. Фиксированные разделы памяти используются для хранения аргументов и результатов, а использование памяти строго контролируется и тщательно тестируется.

3 голосов
/ 16 марта 2010

Это та же проблема, что и у долго работающего веб-сервера или что-то вроде встроенной системы управления системой отопления и вентиляции.

Когда я работал на Поттертона, а затем на Шлюмберже в секторе управления энергопотреблением зданий, мы не использовали динамическое распределение памяти. У нас были блоки фиксированного размера. Данный блок будет использоваться для указанной цели и ничего больше. Размеры блоков определяли, сколько их может быть, поэтому вы можете выбрать X этого и Y этого функционала и т. Д.

Звуки ограничены, но для фиксированных, дискретных задач этого было достаточно.

Это важно, потому что, если вы ошибетесь, вы можете взорвать котел и взять с собой половину школьного здания: - (

Резюме: в некоторых ситуациях вы вообще избегаете динамической памяти.

1 голос
/ 16 марта 2010

Даже без сборки мусора и утечек памяти классический malloc / free может потерпеть неудачу, если у вас есть фрагментация, поэтому статическая разметка памяти - единственный надежный способ гарантировать отсутствие проблем.

0 голосов
/ 16 марта 2010

Можно также спроектировать систему с учетом отказоустойчивости в случае обнаружения ошибок при тестировании. Методы контрольных точек и восстановления могут, вероятно, использоваться для долгосрочных программ, таких как пример Voyager, но, вероятно, их будет сложно реализовать, когда существуют строгие требования в реальном времени.

...