170 похожих чатов

Ты утверждаешь что что-то бесполезно только потому что ты не

можешь понять что оно делает? )

24 ответов

11 просмотров

я не утверждаю, что это бесполезно мне интересна мотивация человека, который писал бумагу, и членов комитета, которые её приняли

Alexander B. Babayants
я не утверждаю, что это бесполезно мне интересна м...

Зайдите с другой стороны: какой интерфейс сделали бы вы? Я не считаю std::align удобным, но однозначно лучший вариант я затрудняюсь предложить.

magras
Зайдите с другой стороны: какой интерфейс сделали ...

std::pair<void *, size_t> align(size_t alignment, size_t obj_size, void * ptr, size_t mem_size); или вообще void * align(size_t alignment, size_t obj_size, void * ptr, size_t mem_size);

Alexander B. Babayants
std::pair<void *, size_t> align(size_t alignment,...

Что будет возвращено в обоих случаях если не хватило места?

Alexander B. Babayants
nullptr или nullptr, 0

Тогда код для работы будет выглядеть примерно так: 1) auto [p, s] = std::align(alignment, size, ptr, mem_size); if (p) { ptr = p; mem_size = s; return p; } else { // handle error } 2) auto p = std::align(alignment, size, ptr, mem_size); if (p) { ptr = p; mem_size = (char*)p + size; return p; } else { // handle error } На мой взгляд такой код выглядит хуже чем с существующим интерфейсом.

Андрей-Руссков Автор вопроса
Alexander B. Babayants
std::pair<void *, size_t> align(size_t alignment,...

вместо pair лучше возвращать условную struct align_result_t с двумя полями

magras
Тогда код для работы будет выглядеть примерно так:...

не согласен если вам так хочется изменять аргументы std::tie(ptr, mem_size) = std::align(alignment, size, ptr, mem_size); if (ptr) { ... } else { /* handle error */ }

Андрей-Руссков Автор вопроса
Alexander B. Babayants
не согласен если вам так хочется изменять аргумент...

Это не эквивалентный код. Изменен порядок проверки результата и обновление ptr. В этом коде ptr обнуляется при нехватке памяти.

magras
Это не эквивалентный код. Изменен порядок проверки...

Я веду к тому, что в текущем интерфейсе состояние представлено парой ptr и mem_size. В то время как возвращаемое значение указывает на успех операции. Это разные значения.

magras
Это не эквивалентный код. Изменен порядок проверки...

Я не могу представить ситуацию, когда вам в "успешной" ветке не нужен старый указатель, а в "провальной" нужен.

magras
Я веду к тому, что в текущем интерфейсе состояние ...

Зачем указывать на успех операции, возвращая тот же указатель второй раз? Почему бы не вернуть true/false?

Alexander B. Babayants
Зачем указывать на успех операции, возвращая тот ж...

Да, можно было бы и так, но и вреда от возврата указателя я не вижу.

Alexander B. Babayants
Я не могу представить ситуацию, когда вам в "успеш...

А что такое старый указатель? На сколько я вижу, идея этого интерфейса примерно в таком: template <class T> T* allocate_on_arena() { static std::array<char, 4096> s_arena; static char* s_ptr = s_arena.data(); static size_t s_size = s_arena.size(); if (void* p = std::allocate(alignof(T), sizeof(T), s_ptr, s_size)) { return new(p) T; } else { // if allocation failed, state haven't changed, so it should be possible to try to allocate smaller type T return nullptr; } } Для выравнивания одного объекта интерфейс std::align не слишком удобен, с этим я не буду спорить. Но как выглядит ваш юзкейс?

magras
Да, можно было бы и так, но и вреда от возврата ук...

Таки я не прав. Эти два указателя отличаются на sizeof(T), поэтому нет, bool'а не достаточно.

magras
А что такое старый указатель? На сколько я вижу, ...

у вас allocate вместо align, это ошибка или специально так? на первый взгляд для юзкейса, который вы привели, больше подойдет просто использовать std::aligned_storage вместо std::array мой юзкейс простой: есть один объект header, и некоторое, определяемое в рантайме, количество объектов entry их все хочется разместить в памяти за одну аллокацию

Alexander B. Babayants
у вас allocate вместо align, это ошибка или специа...

Это простейшая арна. std::aligned_storage здесь ничем не поможет, потому что на арене могут лежать любые T вперемешку. Ошибка там только в том что не обратываются исключения выброшенные из конструтора, но и инвариант функции это не ломает. upd: Да, я допустил несколько ошибок в том числе написал std::allocate вместо std::align.

magras
Это простейшая арна. std::aligned_storage здесь ни...

я не очень понимаю, как на ней может быть больше одного объекта, если s_ptr не сдвигается кроме как на alignment

Alexander B. Babayants
я не очень понимаю, как на ней может быть больше о...

гм. Действительно. Беру свои слова назад: теперь и для меня этот интерфейс выглядит довольно странно. С другой стороны поведение, которого ожидал я как раз мешает обработке исключения в конструкторе.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
I just installed it but how do I use it?
Talula
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
здравствуйте, у меня есть число шестнадцаттиричное, FFFB например, это -5, как мне в консоль вывести -5? мой самописный atoi преобразовывает -5 в 65531
Maxim Of course
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Карта сайта