Dlaczego C ++ 17 wprowadził std :: aligned_alloc?

Sep 13 2020

Cel: zrozumienie motywacji, dla której wprowadzono C ++ 17 std::aligned_allocdo dynamicznego zarządzania pamięcią.

Problem: W przypadku alokacji pamięci w C ++ używanie std::mallocjest praktycznie zawsze odradzane z różnych powodów opisanych w artykule W jakich przypadkach używam malloc i / lub new? . Zamiast tego newprawie zawsze zachęca się do używania wyrażeń w kodzie niskiego poziomu (np. Zobacz Uwagi ).

Pomimo tego zniechęcenia, zastanawiam się, dlaczego wprowadzono C ++ 17, std::aligned_allocktóry wygląda na kontynuację std::malloc.

Czy w C ++ 17 (i nowszych wersjach) jest coś, czego nie można wykonać new(lub inne równoważne narzędzia zachęcane do użycia, jeśli takie istnieją)?

Próby: udało mi się znaleźć tylko następującą dyskusję, która nadal jest w niewielkim stopniu związana z moim pytaniem:

Różnica między wyrównanym mallocem a standardowym mallocem?

Odpowiedzi

5 dratenik Sep 13 2020 at 21:36

C ++ 17 zwiększył obsługę zwykłego C z C99 do C11. Odziedziczył aligned_allocwraz z innymi rzeczami z C11.

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

Dlatego motywacją jest udostępnienie funkcji C w C ++ tym, którzy ich chcą.