Каковы ограничения выравнивания стандартного глобального оператора по умолчанию new?

Я работаю над старым кодом, который использует ATLCComBSTR тип. Я'Я изменяю его так, чтобы он компилировался с использованием Visual C ++ Express Edition, который не поставляется с ATL. Я использовал только очень маленькое подмножествоCComBSTRДелать это довольно просто.

Однако при распределенииBSTR Блок памяти, мне нужно заполнить первые четыре байта с префиксом длины 4 байта. Я'Я обеспокоен тем, что если я используюnew char[size] выражение для выделения памяти для строки, что я буду вызывать ошибки выравнивания из-за выделенногоchar массив не имеет правильного выравнивания для четырехбайтового префикса.

Есть ли в стандарте что-либо, что указывает, какие требования для выравнивания возвращаются значенияnew иметь? Все, что я вижу в C ++ 11:

5.3.4 / 1 [expr.new]

Это зависит от реализации, поддерживаются ли переопределенные типы (3.11).

3.11 / 6 [basic.align]

Требование выравнивания для полного типа можно запросить с помощью выражения alignof (5.3.6). Кроме того, типы char, подписанный символ и неподписанный символ должны иметь самое слабое требование выравнивания. [Примечание: это позволяет использовать типы символов в качестве базового типа для выровненной области памяти (7.6.2) .—конечная нота]

Я нахожу это немного запутанным - "слабое требование выравнивания " говорит мненаименее строгое ограничение на выравнивание, но примечание под этим, кажется, указывает на то, что стандарт означает обратное.

Я в безопасности, используяnew char[sizeof(uint32_t) + 2*(length + 1)] буфер какBSTR как это?

РЕДАКТИРОВАТЬЯ только что понял, что в этом конкретном случаеBSTRнеобходимо использовать SysAllocString для того, чтобы выделить строку в любом случае; но я'меня все еще интересует, нормально ли это использоватьnew в этом случае.