Перераспределение памяти изменяет первоначально более строгое выравнивание объекта
Этот дефект возникает, когда вы используете realloc()
для изменения размера объектов со строгими требованиями к выравниванию памяти.
Указатель возвращен realloc()
могут быть соответственно назначены объектам с менее строгими требованиями к выравниванию. Несогласованное выделение памяти может привести к нижнему потоку буфера или переполнению, незаконно удаленному указателю или доступу к произвольным местоположениям памяти. В процессорах, поддерживающих несогласованную память, выделение ресурсов влияет на эффективность системы.
Для перераспределения памяти:
Измените размер блока памяти.
В Windows®, использовать _aligned_realloc()
с аргументом выравнивания, используемым в _aligned_malloc()
для выделения исходного блока памяти.
В UNIX/Linux используйте ту же функцию с тем же аргументом выравнивания, используемым для выделения исходного блока памяти.
Скопируйте исходное содержимое в новый блок памяти.
Освободите исходный блок памяти.
Примечание
Это исправление имеет поведение, определяемое реализацией. Реализация может не поддерживать требуемое выравнивание памяти и может иметь дополнительные ограничения на размер новой памяти.
Группа: Динамическая память |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: ALIGNMENT_CHANGE
|
Влияние: Низкое |