Koluchiy 0 10 декабря, 2013 Опубликовано 10 декабря, 2013 · Жалоба Здравствуйте, уважаемые гуру. Есть такая конфигурация: NIOS+uC/OSII+Niche stack. На всем этом работает некоторое количество задач. Нужно понять, сколько всему этому надо динамической памяти (Heap). Соответственно, вопрос - как это узнать? Нет ли какого счетчика в ходе отладки, который бы показывал максимальный размер выделенной памяти? Тогда можно было бы в режиме отладки погонять задачи в максимальных режимах и получить минимально-достаточный размер памяти. В общем, подскажите, куда копать. Всем заранее спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 19 декабря, 2013 Опубликовано 19 декабря, 2013 · Жалоба Здравствуйте, уважаемые гуру. Есть такая конфигурация: NIOS+uC/OSII+Niche stack. На всем этом работает некоторое количество задач. Нужно понять, сколько всему этому надо динамической памяти (Heap). Соответственно, вопрос - как это узнать? Нет ли какого счетчика в ходе отладки, который бы показывал максимальный размер выделенной памяти? Тогда можно было бы в режиме отладки погонять задачи в максимальных режимах и получить минимально-достаточный размер памяти. В общем, подскажите, куда копать. Всем заранее спасибо за ответы. Обычно heapsize это параметр определяемый на этапе сборки кода если код просто исполняемый. А вот если у вас ОС, то это уже надо рыть в настройках ядра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 19 декабря, 2013 Опубликовано 19 декабря, 2013 · Жалоба странно это как - то берем тср стэк к примеру, он под все сообщения выделяет динамически память, а после отправки ее грохает. Если обмен плотный, сообщений много, то и памяти много пойдет, а если обмен вялый, то ее мало пойдет. И как такое на этапе сборки определить? Правильнее тут писать программу с правильной реакцией на окончание кучу, ИМХО... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WitFed 1 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба Обычно считается, что выделять память после стартового инита приложения -- неправильно, ибо менеджер кучи обладает непредсказуемым временем ответа в общем случае из-за фрагментации, хотя возможны хитрые варианты. Но если архитектура памяти стека не настраиваема сразу на старте, можно предложить универсальную динамическую схему экспериментального этапа -- периодически запускать нить с максимальным приоритетом, которая будет выгребать у ОС всю возможную память дихотомией размеров и сразу же возвращать, выведя нужные данные в лог. Для конкретной ОС можно в map-файле подглядеть не свои глобальные переменные -- вполне вероятно, что учёт уже ведётся, и осталось его только вывести наружу. Также обычно компиляторы поддерживают "перегрузку" любой системной функции -- "повесив" свои версии malloc()/free()/calloc(), мы получим proxy, через которое все станут работать. Только вот надо ещё суметь вызвать прежние версии... ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба чего то вы такое сложное сказали, что даже не понятно о чем... что выделять память после стартового инита приложения -- неправильно вот это к примеру что значит? Что вы динамическую память используете как статическую? А нафига тогда ее делать динамической? Какой в ней смысл если вы знаете изначально сколько ее вам надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться