Dlaczego C ++ 17 wprowadził std :: aligned_alloc?
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
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ą.