Я пытаюсь понять следующий абзац из Stroustrup "Язык программирования С++" на стр. 282 (акцент мой):
Чтобы освободить место, выделенное новым, удалить и удалить [], должно быть возможно для определения размера выделенного объекта. Это означает, что объект, выделенный с использованием стандартной реализации нового, будет занимать немного больше места, чем статический объект. Как минимум, пространство необходимо сохранить размер объектов. Обычно два или более слова на распределения используются для управления свободными магазинами. Большинство современных машин используйте 8-байтные слова. Эти накладные расходы незначительны при распределении многие объекты или крупные объекты, но это может иметь значение, если мы выделяем лоты небольших объектов (например, ints или Points) в свободном хранилище.
Обратите внимание, что автор не различает, является ли объект массивом, или нет, в предложении, выделенном выше.
Но в соответствии с параграфом §5.3.4/11 в С++ 14 мы имеем (мой акцент):
Когда новое выражение вызывает функцию распределения и это распределение не было расширено, новое выражение передает объем пространства запросил функцию распределения в качестве первого аргумента типа станд:: size_t. Этот аргумент должен быть не меньше, чем размер создаваемый объект; он может быть больше, чем размер объекта только, если объект является массивом.
Возможно, мне что-то не хватает, но, похоже, у нас есть противоречие в этих двух утверждениях. Полагаю, что дополнительное пространство требуется только для объектов массива, и что это дополнительное пространство будет содержать количество элементов в массиве, а не размер массива в байтах.