Warum hat C ++ 17 std :: align_alloc eingeführt?

Sep 13 2020

Ziel: Die Motivation verstehen, warum C ++ 17 std::aligned_allocfür die dynamische Speicherverwaltung eingeführt wurde.

Problem: Für die Speicherzuweisung in C ++ wird die Verwendung std::mallocaus verschiedenen Gründen, die unter Beispiele aufgeführt sind, praktisch immer nicht empfohlen. In welchen Fällen verwende ich malloc und / oder new? . Stattdessen wird die Verwendung von newAusdrücken in Code auf niedriger Ebene fast immer empfohlen (siehe z . B. Hinweise ).

Trotz dieser Entmutigung frage ich mich, warum C ++ 17 eingeführt wurde, std::aligned_allocwas wie eine Fortsetzung von aussieht std::malloc.

Gibt es in C ++ 17 (und darüber hinaus) etwas, das nicht von new(oder anderen gleichwertigen Dienstprogrammen, deren Verwendung empfohlen wird, falls vorhanden) ausgeführt werden kann?

Versuche: Ich konnte nur die folgende Diskussion finden, die noch im Zusammenhang mit meiner Frage steht:

Unterschied zwischen ausgerichtetem Malloc und Standard-Malloc?

Antworten

5 dratenik Sep 13 2020 at 21:36

C ++ 17 hat seine Unterstützung für einfaches C von C99 auf C11 erhöht. Es hat aligned_alloczusammen mit anderen Sachen von C11 geerbt .

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

Die Motivation besteht also darin, C-Funktionen in C ++ für diejenigen verfügbar zu machen, die sie möchten.