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