Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Mot0y
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
1

Распределение памяти под Stack и Heap

05.07.2016, 01:38. Просмотров 3496. Ответов 2
Метки нет (Все метки)

Подскажите пожалуйста, правильно ли я понимаю что при использовании функций malloc или calloc необходимо выделять память именно в куче (Heap)?
У меня есть stm32f4discovery, у нее на борту 192 кБайт ОЗУ, т.е 192*1024 = 196608байт.
В при создании проекта в стартап файле было прописано Heap_Size EQU 0x00000200 = 512байт.
Если я создаю двухмерный массив с помощью calloc, вот собственно отрывок кода
Код
uint8_t **a;
a = (uint8_t **)calloc(height,sizeof(uint8_t *));
for (uint16_t i=0; i<=height; i++)
{
a[i]=(uint8_t *)calloc(width,sizeof(uint8_t));
}
и задаю размерность к примеру 150 на 150 получается, нужно будет выделить память 150*150 = 22500 байт, но в куче указанно только 512байт, значить необходимо увеличить кучу а увеличить ее можно до размеров 196608 минус размер на стек, т.е к примеру могу задать 100000байт и спокойно играть массивами? Правильно ли я понимаю распределение в SROM STM32? Нигде больше SROM кроме как в стеки и в куче не используется?
Заранее прошу прощения за нубские вопросы, но развернутого ответа я не нашел на просторах интернета, а с забугорной литературой пока еще не дружу =(
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 01:38
Ответы с готовыми решениями:

STM32F303 задать размер STACK and HEAP
Проблема в следующем - имеющийся в моем коксе стартовый файл...

Выделение памяти под глобальные переменные
Кто - нибудь объясните мне не ведающему почему так: Имеется структура с таким...

Память Heap и Stack
Здравствуйте , подскажите пожалуйста такой вопрос . Вот есть есть три области...

Распределение оперативной памяти выделенной под программу
Здравствуйте. Помогите с объяснением некоторых тем, нигде не могу найти. №1...

Распределение памяти под объекты числовых типов. Не могу понять
Может быть немного не в тему пишу, т.к. этот вопрос не относится конкретно к...

2
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.07.2016, 16:53 2
Насчёт кучи - правильно.
Если в схеме нет внешней памяти (а на дискавери её нет), то всё ложится во внутренний SROM.
И стек, и куча и глобальные переменные и всё-всё-всё ....
100000 байт - пробуйте, но имейте также в виду, что SROM у этих процов не лежит в виде одного непрерывного куска (увы) размером в 192 кила, а побита или на 3 или на 4 части (уточните в ДШ), а вся фигня автоматически летит в самый большой из этих кусков размером 128 кил. Остальные, по-моему, сами по себе не используются, их надо "активировать" руками.
Т.е. каким-либо образом "взять", например, 150 кил ОЗУ физически невозможно, несмотря на то, что "количественные показатели" это позволяют.
Для начала для простоты можете считать, что у Вас 128 кил памяти. Или курите скрипты Вашего линкера на предмет создания дополнительных секций памяти (если, конечно, их там нет).

При работе с динамической памятью не забывайте её высвобождать и помните про фрагментацию памяти.
0
Mot0y
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
05.07.2016, 17:03 3
Отлично, про части даже и не знал. Значить все нормально =)
Спасибо вам за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2016, 17:03

Почему в Си массив со статическим размером объявленный внутри функции помещается в stack, а не в heap?
Собственно, сабж. Чем было обусловленно такое решение? В джава, например,...

Дамп динамической памяти (Heap)
Подскажите, как можно получить дамп пользовательского Heap. С помощью каких...

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые&quot;дыры&quot; избегают,что нужно сделать что бы малые &quot;дыры&quot; не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru