реклама на сайте
подробности

 
 
> выделение памяти malloc, особенности malloc в случае использования newlib
winniethepooh
сообщение Mar 3 2017, 07:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Здравствуйте.
Подозреваю что вопрос совсем банальный, но все же задам.
В тестовой программе bare metal при выделении памяти функция malloc для переменной типа uint32_t arm компилятор (использую keil) выделяет блоки кратные 8 (например 0x20000080; 0x20000088..).
В случае использования yagarto- newlib (eclipse) выделяются блоки кратные 16(например 0х1fff0d30; 0х1fff0d40..)
Почему yagarto выделяет блоки в двое большего размера под переменную такого же типа?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
neiver
сообщение Mar 3 2017, 08:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Это особенности реализации конкретных аллокаторов. В keil аллокатор оптимизирован под небольшие объемы памяти.
Go to the top of the page
 
+Quote Post
Olej
сообщение Apr 21 2017, 09:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(winniethepooh @ Mar 3 2017, 10:44) *
В тестовой программе bare metal при выделении памяти функция malloc для переменной типа uint32_t arm компилятор (использую keil) выделяет блоки кратные 8 (например 0x20000080; 0x20000088..).
В случае использования yagarto- newlib (eclipse) выделяются блоки кратные 16(например 0х1fff0d30; 0х1fff0d40..)
Почему yagarto выделяет блоки в двое большего размера под переменную такого же типа?

Вопрос хороший, интересный...
1. Наблюдаемое вами различие связано не с "размером под переменную", а с выравниванием на границу выделяемых блоков. При выравнивании на 16 байт запросите 1 байт или 13 - и вы получите 16, запросите 17 - будет 32.
2. malloc() - функция стандартной библиотеки C, а никак не принадлежность компилятора (хотя, конечно, конкретная библиотека увязана с компилятором и идёт в комплекте с ним). Вы можете сменить стандартный malloc() на свой собственный аллокатор, который будет работать по любым вашим правилам (о том как это делается довольно много написано).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.02309 секунд с 7
ELECTRONIX ©2004-2016