Перейти к содержанию
    

Можно ли узнать максимальный размер кучи?

Здравствуйте, уважаемые гуру.

 

Есть такая конфигурация: NIOS+uC/OSII+Niche stack.

На всем этом работает некоторое количество задач.

Нужно понять, сколько всему этому надо динамической памяти (Heap).

Соответственно, вопрос - как это узнать?

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

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

 

В общем, подскажите, куда копать.

 

Всем заранее спасибо за ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, уважаемые гуру.

 

Есть такая конфигурация: NIOS+uC/OSII+Niche stack.

На всем этом работает некоторое количество задач.

Нужно понять, сколько всему этому надо динамической памяти (Heap).

Соответственно, вопрос - как это узнать?

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

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

 

В общем, подскажите, куда копать.

 

Всем заранее спасибо за ответы.

Обычно heapsize это параметр определяемый на этапе сборки кода если код просто исполняемый. А вот если у вас ОС, то это уже надо рыть в настройках ядра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

странно это как - то

 

берем тср стэк к примеру, он под все сообщения выделяет динамически память, а после отправки ее грохает. Если обмен плотный, сообщений много, то и памяти много пойдет, а если обмен вялый, то ее мало пойдет. И как такое на этапе сборки определить?

 

Правильнее тут писать программу с правильной реакцией на окончание кучу, ИМХО...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Для конкретной ОС можно в map-файле подглядеть не свои глобальные переменные -- вполне вероятно, что учёт уже ведётся, и осталось его только вывести наружу.

Также обычно компиляторы поддерживают "перегрузку" любой системной функции -- "повесив" свои версии malloc()/free()/calloc(), мы получим proxy, через которое все станут работать. Только вот надо ещё суметь вызвать прежние версии... ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чего то вы такое сложное сказали, что даже не понятно о чем...

 

что выделять память после стартового инита приложения -- неправильно

вот это к примеру что значит? Что вы динамическую память используете как статическую? А нафига тогда ее делать динамической? Какой в ней смысл если вы знаете изначально сколько ее вам надо?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...