0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
|
|
1 | |
Распределение памяти под Stack и Heap05.07.2016, 01:38. Показов 6351. Ответов 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)); } Заранее прошу прощения за нубские вопросы, но развернутого ответа я не нашел на просторах интернета, а с забугорной литературой пока еще не дружу =(
0
|
05.07.2016, 01:38 | |
Ответы с готовыми решениями:
2
Хранение переменных в HEAP (устройство Stack и Heap) Распределение памяти под списки Память Heap и Stack Распределение оперативной памяти выделенной под программу |
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 | |
05.07.2016, 17:03 | |
Помогаю со студенческими работами здесь
3
Распределение памяти под объекты числовых типов. Не могу понять Heap/Stack allocations и cache misses STM32F303 задать размер STACK and HEAP STACK и HEAP - где лежат значения объектов Почему в Си массив со статическим размером объявленный внутри функции помещается в stack, а не в heap? Дамп динамической памяти (Heap) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |