После удаления всех вызовов malloc и calloc из нашего кода для встраиваемой системы я с удивлением обнаружил, что malloc все еще связывается. График вызовов указал мне на функцию, которая не имела явных вызовов * alloc и не вызывала любые библиотечные функции, которые могут быть выделены, например strdup
.
Мне пришлось взглянуть на сгенерированную сборку, чтобы понять, что это произошло из-за встроенной функции, содержащей VLA.
Я думал, что VLA нужно размещать в стеке. Этот компилятор сломан?
uint8_t
, поэтому в худшем случае было 256 байтов, примерно 1/5 стека. - person AShelly   schedule 08.10.2015char arr[256]
вместо VLA? - person Matt   schedule 08.10.2015