Одной из целей является то, что они могут быть определены пользователем отдельно.Поэтому, если я хочу инициализировать память в одиночных объектах, выделенных в куче, в 0xFEFEFEFE, а память в массивах, выделенных в куче, в 0xEFEFEFEF, потому что я думаю, что это поможет мне с отладкой, тогда я смогу.другое дело.Я предполагаю, что если ваша конкретная программа в основном использует довольно маленькие объекты и довольно большие массивы, то вы можете выделить разные кучи в надежде, что это уменьшит фрагментацию.Но в равной степени вы можете определить классы, для которых вы выделяете большие массивы, и просто переопределить operator new[]
для этих классов.Или operator new
может переключаться между различными кучами в зависимости от размера.
Существует фактически различие в формулировке требований.Один выделяет память, выровненную для любого объекта указанного размера, другой выделяет память, выровненную для любого массива указанного размера.Я не думаю, что есть какая-либо разница - массив размера 1, безусловно, имеет такое же выравнивание, что и объект - но я могу ошибаться.Тот факт, что по умолчанию версия массива возвращает то же, что и версия объекта, убедительно свидетельствует о том, что нет никакой разницы.Или, по крайней мере, требования к выравниванию объекта более строгие, чем требования к массиву, которые я не могу понять ...