Почему в C ++ 17 введен std :: align_alloc?

Sep 13 2020

Цель: понять причину появления C ++ 17 std::aligned_allocдля управления динамической памятью.

Проблема: для выделения памяти в C ++ использование std::mallocпрактически всегда не рекомендуется по разным причинам, приведенным на примерах в разделе. В каких случаях я использую malloc и / или new? . Вместо этого использование newвыражения почти всегда рекомендуется в низкоуровневом коде (например, см. Примечания ).

Несмотря на это разочарование, мне интересно, почему появился C ++ 17, std::aligned_allocкоторый выглядит как продолжение std::malloc.

Есть ли что-нибудь в C ++ 17 (и более поздних версиях), что не может быть выполнено new(или другими эквивалентными утилитами, которые рекомендуется использовать, если таковые имеются)?

Попытки: я смог найти только следующее обсуждение, которое все еще отдаленно связано с моим вопросом:

Разница между выровненным malloc и стандартным malloc?

Ответы

5 dratenik Sep 13 2020 at 21:36

C ++ 17 увеличил поддержку простого C с C99 до C11. Он унаследован aligned_allocвместе с другими вещами от C11.

бумага: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html

Таким образом, мотивация состоит в том, чтобы сделать возможности C доступными в C ++ для тех, кому они нужны.