Pourquoi C ++ 17 a-t-il introduit std :: align_alloc?

Sep 13 2020

Objectif: comprendre les raisons pour lesquelles C ++ 17 a été introduit std::aligned_allocpour la gestion dynamique de la mémoire.

Problème: Pour l'allocation de mémoire en C ++, l'utilisation std::mallocest pratiquement toujours déconseillée pour diverses raisons illustrées sous Dans quels cas utiliser malloc et / ou new? . Au lieu de cela, l'utilisation d'une newexpression est presque toujours encouragée dans le code de bas niveau (par exemple, voir Notes ).

Malgré ce découragement, je me demande pourquoi C ++ 17 a introduit std::aligned_allocce qui ressemble à une continuation de std::malloc.

Y a-t-il quelque chose dans C ++ 17 (et au-delà) qui ne peut pas être exécuté par new(ou d'autres utilitaires équivalents encouragés à utiliser, le cas échéant)?

Tentatives: je n'ai pu trouver que la discussion suivante, qui est toujours liée à distance à ma question:

Différence entre malloc aligné et malloc standard?

Réponses

5 dratenik Sep 13 2020 at 21:36

C ++ 17 a augmenté sa prise en charge du C brut de C99 à C11. Il a hérité aligned_allocavec d'autres trucs de C11.

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

La motivation est donc de rendre les fonctionnalités C disponibles en C ++ pour ceux qui les souhaitent.