Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
1

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

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

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, правильно ли я понимаю что при использовании функций 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2016, 01:38
Ответы с готовыми решениями:

Хранение переменных в HEAP (устройство Stack и Heap)
Добрый день. Проблемы с устройством памяти стека и кучи: если я создаю объект vanya класса Person,...

Распределение памяти под списки
Всем здравствуйте! У меня по предмету программирование курсовая работа по теме: &quot;Распределение...

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

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

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

При работе с динамической памятью не забывайте её высвобождать и помните про фрагментацию памяти.
0
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
05.07.2016, 17:03 3
Отлично, про части даже и не знал. Значить все нормально =)
Спасибо вам за помощь.
0
05.07.2016, 17:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2016, 17:03
Помогаю со студенческими работами здесь

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

Heap/Stack allocations и cache misses
Цитата взята из книги Разве нету разницы где данные в стеке или куче? И там и там же могут...

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

STACK и HEAP - где лежат значения объектов
Добрый день. Разбираюсь с STACK и HEAP. Объясните где не прав. По умолчанию в STACK...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru