В C++17 представлены std::aligned_alloc
и new
с учетом выравнивания, которые могут выполнять избыточное выравнивание, но как насчет std::allocator
? Обрабатывает ли он чрезмерно выровненные типы?
Обрабатывает ли std::allocator чрезмерно выровненные типы в С++ 17?
comment
ой, я удалил свой неправильный ответ, ужастик с копией и вставкой ... (не стесняйтесь проголосовать за меня ... :) )
- person Massimiliano Janes   schedule 25.09.2017
comment
Да, open-std.org/jtc1/ sc22/wg21/docs/papers/2016/p0035r4.html удалил текст, сделав его реализацией определенной.
- person Marc Glisse   schedule 25.09.2017
comment
@MassimilianoJanes Неважно, я нашел раздел в N4659 (C++ 17 DIS).
- person Jamboree   schedule 25.09.2017
Ответы (1)
В N4659 (C++ 17 DIS) 23.10.9.1 [allocator.members], маркер 2
T* выделить (size_t n);
Возвращает: Указатель на начальный элемент массива хранения размером n * sizeof(T), выровненный соответствующим образом для объектов типа T.
По сравнению с C++14 предложение
Определяется реализацией, поддерживаются ли типы с чрезмерным выравниванием.
был удален. Таким образом, std::allocator
должен поддерживать типы с чрезмерным выравниванием в C++17.
person
Jamboree
schedule
25.09.2017
гм, N4659 (версия в формате pdf, которую я нашел на www.open-std.org) по-прежнему читается дословно в соответствии с моим первоначальным ответом, то есть поддержка перегруженных типов определяется реализацией...
- person Massimiliano Janes; 25.09.2017
@MassimilianoJanes Я нашел его на github.com/timsong-cpp/cppwp, не уверен, что тот на сайте open-std.org.
- person Jamboree; 25.09.2017
хорошо, читая комментарий Марка Глиссе, становится ясно, что вы правы (приятно знать, что функции распределения теперь также принимают параметр выравнивания).
- person Massimiliano Janes; 25.09.2017
Не могли бы вы нажать принять этот ответ? Именно поэтому выровненный_аллокатор больше не нужен.
- person sandthorn; 31.08.2018
@Jamboree Это здорово. Спасибо, что раскопал это.
- person KeyC0de; 27.09.2019