Evgeny_CDАрхитектор (19.01.2017 19:05 - 19:31, просмотров: 80) ответил Николай Коровин на У меня была сугубо утилитарная мысль, не претендующая на фундаментальный размах, о том, что мы можем по-другому работать с памятью, если уж начинаем мир с нуля. Сделать две оптимизации указателей — подвижные и неподвижные. Неподвижные программа
Надо разделять память данных и память кода. Лично я считаю, что во встраиваемой системе набор кода не должен меняться после старта. Вообще. И в иделе код встраиваемой системы должен состоять из трех файлов - минимума асмовых вставок, хидеров и мегафайла со всем С++ кодом. Так и GCC будет поляна для оптимизации.
Но при работе системы не весь код стартует, и не весь сразу стартует.
Вполне могут быть участки кода, которые не вызвались никогда - ошибки не случились, редкие данные из IO не пришли.
В части память данных динамическая память важна, но ее использовать надо с умом.
Предложенный механизм перезаписи указателей в программе при дефрагментации памяти - это полный ПЭ. RT будет хуже самых плохих нынешних реализаций, ошибок может быть нереально много.
Вооще я считаю, что RT и динамическая память совместимы при очень малых дозах динамической памяти.
Пример. Есть обработчик прерывания, есть пост-обработчик, и есть высокоуровневый код.
Обработчик аллокирует память из выделенного ему специалиного буфера, простейшими механизмами. Кольцевой буфер или типа того.
Пост-обработчик пакует данные в блоки, удобные для выосокоуровневой обработки (PPP разбирает до IP пакетов, например), и вызывает высокоуровневую процедуру по мере готовности. Также чистит память буфера обработчик прерывания, и обращаеся k malloc - чтобы поддерживать запас буферов для обработчика прерываний.
В части медленных процедур ничего лучше дефрагментатора на основе MMU пока никто не придумал.