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

Вопрос по аллокаторам на фоне спора с jxy-s на Гитхабе.



Используемые средства платформы позволяют выделять память с некоторым тегом - четырехсимвольной константой - для дальнейшего удобства отладки.

С++ обёртка в виде шаблона аллокатора должна уметь использовать эти теги. Однако должен ли тег быть частью типа - или всё-таки состояния?

17 ответов

10 просмотров

а есть ли смысл платить за то, чтобы тег был частью состояния?

Dmitriy-[Отпуск] Автор вопроса
Vlad
а есть ли смысл платить за то, чтобы тег был часть...

Аргументы jxy-s за параметр шаблона: 1. Теги вряд ли будут меняться в рантайме 2. Отсутствует риск "растекания" аллокаций с конкретным тегом по коду - чётко прослеживается связь "codepath-tag" Мои аргументы за состояние: 1. Избавление от копирований контейнеров на границе тегов (и поддержка move-only сущностей) 2. Совместимость с тегонезависимым кодом (например, использующим дефолтный operator-new-based аллокатор)

Dmitriy [Отпуск]
Аргументы jxy-s за параметр шаблона: 1. Теги вряд...

про ваш первый аргумент: а у выделенной памяти можно поменять тег после ее выделения?

Dmitriy [Отпуск]
Аргументы jxy-s за параметр шаблона: 1. Теги вряд...

сделай тег отдельно и аллокатор использующий глобальную переменную =)

Dmitriy [Отпуск]
Нельзя

получается, что копировать все равно придется, чтобы данные лежали в памяти с правильным тегом?

Dmitriy-[Отпуск] Автор вопроса
Vlad
получается, что копировать все равно придется, что...

Смотря что считать "правильным" - термин "граница тегов" весьма тонкий. Можно смувать, например, вектор целиком - и данные, и аллокатор (сам по себе он trivially copyable). Считается, что условием эквивалентности аллокаторов всегда является равенство тегов.

Dmitriy-[Отпуск] Автор вопроса
Dmitriy [Отпуск]
Аргументы jxy-s за параметр шаблона: 1. Теги вряд...

Фактически - мой первый аргумент vs. второй аргумент jxy-s

Dmitriy [Отпуск]
Фактически - мой первый аргумент vs. второй аргуме...

а почему это будет не тегонезависимым кодом, если сделать аллокатор-обертку над std::alocator, приводящийся к нему?)

Dmitriy [Отпуск]
Смотря что считать "правильным" - термин "граница ...

перемещать данные ок, но не аллокатор с тегом, насколько я себе представляю всю эту конструкцию. потому что тег перемещенного аллокатора не будет совпадать с тегом памяти, в которую данные перемещаются

Я бы сказал, что это дело вкуса. Лично я бы предпочел тэг в состоянии, потому что работал с тэгами аллокаторов на уровне типов - это много гемороя.

Dmitriy-[Отпуск] Автор вопроса
Vlad
перемещать данные ок, но не аллокатор с тегом, нас...

Так перемещение вектора подразумевает "кражу" буфера у исходного объекта, а не поэлементное перетаскивание содержимого в другую память :)

Dmitriy [Отпуск]
Так перемещение вектора подразумевает "кражу" буфе...

а, точно тогда есть смысл хранить тег как часть состояния

Dmitriy [Отпуск]
Смотря что считать "правильным" - термин "граница ...

Это может дать не очевидный результат: память выделенная через вектор перешедший границу модуля будет тэгаться старым тэгом. По-хорошему, наверное, тэгированные аллокации должны покидать модуль только в виде константных ссылок, чтобы такого не происходило.

magras
Это может дать не очевидный результат: память выде...

Плюс отключить пропагацию аллокаторов при копировании.

Dmitriy-[Отпуск] Автор вопроса
magras
Плюс отключить пропагацию аллокаторов при копирова...

С этим соглашусь - иначе точно получим нежелательную утечку тэгов

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта