fk0, легенда (02.01.2014 23:52, просмотров: 615) ответил Mahagam на MPU выявит только один тип ошибок: запись мимо правильного места. а это либо кривая работа с указателями, либо выход за пределы массива. моя статистика говорит что я давно так не ошибался )
Обращение по NULL-указателю -- это уже, наверное, половина ошибок. Хоть на чтение, хоть на запись. Не стоит того? Исполнение с неправильного места (попортили стек и сделали return) -- тоже. Чтение по неправильному указателю -- тоже весьма актуально (в ARM 4ГБ адресное пространство и всего-лишь несколько десятков КБайт из них -- данные относящиеся к задаче). А запись мимо правильного места чревата (как и exec чего попало) всеразрушающими лавинными эффектами. Кроме того, одни необнаружимые ошибки (порча стека) имеют тенденцию вызывать другие, более серьёзные. Переполнение буфера на ARM, кстати, кончается фатально (стек растёт вниз, буфер вверх).
Дело не в наличии говнокода, а в том, что любые программы содержат ошибки. И если сравнивать две системы, в каждой из которых 100 процессов, например, но в одной ~половина ошибок обладает лавинным эффектом, а в другой всё заканчивается перезапуском сбойного процесса -- разница по-моему уже существенна. Но что более принципиально, во второй ещё будет отладочная информация, протоколирование ошибок и последующее их исправление. А на первой -- необъяснимые глюки. TDD здорово, но 100% программы протестировать невозможно.
[ZX]