ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
843637 Топик полностью
fk0, легенда (26.05.2018 13:28, просмотров: 292) ответил AlexG на Возникла проблема с динамической памятью в многопоточной программе. Три потока динамически выделяют и освобождают память - огромное количество malloc, free, new, delete по тексту. Очень часто malloc оказывается вызван сразу в двух потоках. Штатный
Компилятор обычно генерирует memory map, там есть список символов, в частности функций, и зависимости, какая функция была слинкована в связи с чем (зависит от другой функции). Найти иаровские функции и кто их вызывает и всех этих кто заменить на свои функции. По большому счёту, если там такая проблема, то иаровскую libc нужно сразу выкидывать и брать какой-нибудь newlib. Потому, что в C-библиотеке 1) полно функций выделяющих память, 2) полно потенциально потоконебезопасных функций, 3) если иару на это наплевать, то где гарантия, что они где-нибудь ещё обычную потокобезопасную функцию не превратили в небезопасную (в однозадачном окружении это незаметно), 3) у тебя уже сейчас проблемы с жизненно-важными функциями: errno (общий для всех потоков), printf (любая запись в файл -- доступ к буферу не синхронизирован). Если речь про ARM, то зачем вообще с IAR связываться, очевидно же, что там ПО "профессионального качества" (говнокод, с рекордными может быть характеристиками по отдельным направлениям, например побеждает в каких-нибудь тестах приводимых в рекламе, но в остальном что-то непотребное). И если там такие проблемы, то следующую тебе может преподнести говённый first fit аллокатор, моментально фрагментирующий память.
[ZX]