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

выделение памяти malloc

Здравствуйте.

Подозреваю что вопрос совсем банальный, но все же задам.

В тестовой программе bare metal при выделении памяти функция malloc для переменной типа uint32_t arm компилятор (использую keil) выделяет блоки кратные 8 (например 0x20000080; 0x20000088..).

В случае использования yagarto- newlib (eclipse) выделяются блоки кратные 16(например 0х1fff0d30; 0х1fff0d40..)

Почему yagarto выделяет блоки в двое большего размера под переменную такого же типа?

 

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


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

Это особенности реализации конкретных аллокаторов. В keil аллокатор оптимизирован под небольшие объемы памяти.

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


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

В тестовой программе 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() на свой собственный аллокатор, который будет работать по любым вашим правилам (о том как это делается довольно много написано).

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


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

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

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

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

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

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

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

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

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

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