Por que C ++ 17 introduziu std :: align_alloc?

Sep 13 2020

Objetivo: compreender a motivação por que o C ++ 17 foi introduzido std::aligned_allocpara o gerenciamento de memória dinâmica.

Problema: Para a alocação de memória em C ++, o uso std::mallocé quase sempre desencorajado devido a vários motivos exemplificados em Em quais casos eu uso malloc e / ou new? . Em vez disso, o uso de newexpressão é quase sempre incentivado em código de baixo nível (por exemplo, consulte as Notas ).

Apesar desse desânimo, eu me pergunto por que o C ++ 17 foi introduzido, o std::aligned_allocque parece uma continuação de std::malloc.

Existe algo no C ++ 17 (e além) que não pode ser executado por new(ou outros utilitários equivalentes encorajados a usar, se houver)?

Tentativas: só consegui encontrar a seguinte discussão, que ainda está remotamente relacionada à minha pergunta:

Diferença entre malloc alinhado e malloc padrão?

Respostas

5 dratenik Sep 13 2020 at 21:36

C ++ 17 aumentou seu suporte para C simples de C99 para C11. Ele herdou aligned_allocjunto com outras coisas do C11.

papel: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html

Portanto, a motivação é disponibilizar recursos de C em C ++ para quem os deseja.