Perché C ++ 17 ha introdotto std :: align_alloc?

Sep 13 2020

Obiettivo: comprendere la motivazione per cui C ++ 17 ha introdotto std::aligned_allocper la gestione dinamica della memoria.

Problema: per l'allocazione della memoria in C ++, l'utilizzo std::mallocè praticamente sempre sconsigliato a causa di vari motivi esemplificati in In quali casi utilizzo malloc e / o new? . Invece, l'uso di newespressioni è quasi sempre incoraggiato nel codice di basso livello (ad esempio, vedere Note ).

Nonostante questo scoraggiamento, mi chiedo perché C ++ 17 abbia introdotto std::aligned_allocche sembra una continuazione di std::malloc.

C'è qualcosa in C ++ 17 (e oltre) che non può essere eseguito da new(o altre utilità equivalenti incoraggiate a usare, se presenti)?

Tentativi: sono riuscito a trovare solo la seguente discussione, che è ancora lontanamente correlata alla mia domanda:

Differenza tra malloc allineato e malloc standard?

Risposte

5 dratenik Sep 13 2020 at 21:36

C ++ 17 ha aumentato il suo supporto per C semplice da C99 a C11. Ha ereditato aligned_allocinsieme ad altre cose da C11.

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

Quindi la motivazione è rendere le funzionalità C disponibili in C ++ per coloro che le desiderano.