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