2015-11-09 2 views
0

В настоящее время я работаю над проектом с использованием платы Atmel (SAM4C ARM Cortex-M4), и я заметил, что, когда я устанавливаю бит «ловушка без выравнивания слов», я всегда получал «Unaligned Ошибка использования доступа ".malloc с выровненной памятью в newLib

После некоторого расследования я понял, что возвратный блок памяти malloc неравнозначен. Итак, мне было интересно, есть ли способ настроить malloc, чтобы он выделял память с помощью указателя выравнивания? Я знаю, что memalign может сделать трюк, но поскольку уже слишком много места, где я использую malloc, было бы проще, если бы я мог использовать malloc вместо этого.

Я пользуюсь библиотекой "newLib".

+0

Добавьте некоторые конкретные примеры возвращаемого адреса, которые вы наблюдаете, чтобы быть неравнозначными, и некоторый пример кода, который генерирует исключение; потому что это не ожидаемое поведение newlib в моем опыте. – Clifford

ответ

2

Состояние спецификации ISO malloc() всегда возвращает адрес памяти, подходящий для указателя на любой объект, который соответствует указанному размеру. На практике это обычно означает, что он должен быть выровнен по 8-байтовой границе.

Если это не так, то это несоответствующая реализация и должна быть отшлепана.

Это, как говорится, я действительно был бы действительно удивлен, если newLib не соответствует.

Смежные вопросы