Maksym
так ты свой аллокатор можешь юзать и в своих же контейнерах
Maksym
аллокатор это просто стратегия выделения памяти
ed
Ну вот в том то и соль что если вы про std, аллокаторы насколько я помню это просто callback функция в контейнерах.. А моя идея в выделении большого куска памяти вначале и перераспределении его своими силами во время исполнения.. Да, это можно сделать стандартными средствами, но чё то не особо понимаю зачем, если это уже достаточно отчаянные меры и можно уже буквально отслеживать каждую аллокацию конструкцию и деструкцию каждого объекта
Egor
Лол, уже ответил
какие на его счёт сомнения? почему не хочется переопределять?
ed
Так ладно, раз уж это так важно.. Сейчас у меня как-то так: Есть 2 статические функции выделения и высвобождение кучи фиксрованного размера. Помимо них есть фнкции alloc, dealloc (ну и их шаблонные и массивные вариации) для аллокаций динамического размера из ранее описанной фиксированной кучи. Там под капотом основная магия в виде пула со страницами динамической длинны. Далее идут контейнеры со встроенными в них стратегиями выделения, напримел аналог вектора(не совсем но всё же) и его собрат с объектным пулом на борту.. Это всё уже есть, реализовано и отлажено. Раз уж вы настаиваете, да, это очередной 3д движок.. Подытожу - std контейнеры я не использую из за их немощи, малого контроля и весьма некрасивой системы переопрделения аллокаторов. Ну а при написании своих контейнеров сама собой вытекает и система менеджмента памяти..
Egor
анреал переопределяет new, почему не сделать также?
ed
анреал переопределяет new, почему не сделать также?
ска :D Не хочу писать в доках "new это не new будьте осторожны"
Egor
не пиши, будет по-тихому
ttldtor
Так ладно, раз уж это так важно.. Сейчас у меня как-то так: Есть 2 статические функции выделения и высвобождение кучи фиксрованного размера. Помимо них есть фнкции alloc, dealloc (ну и их шаблонные и массивные вариации) для аллокаций динамического размера из ранее описанной фиксированной кучи. Там под капотом основная магия в виде пула со страницами динамической длинны. Далее идут контейнеры со встроенными в них стратегиями выделения, напримел аналог вектора(не совсем но всё же) и его собрат с объектным пулом на борту.. Это всё уже есть, реализовано и отлажено. Раз уж вы настаиваете, да, это очередной 3д движок.. Подытожу - std контейнеры я не использую из за их немощи, малого контроля и весьма некрасивой системы переопрделения аллокаторов. Ну а при написании своих контейнеров сама собой вытекает и система менеджмента памяти..
безусловно твой EdBraedVector лучше std варианта
Igor
Кто-то понимает как должны работать auto template parameters? https://godbolt.org/g/YYPL1b - в этом примере и у gcc и clang странное поведение. gcc выбирает тип параметра unsigned или int в зависимости от порядка инстациации, у clang странно вывелся тип для указателя. Баги в обоих компиляторях? У MSVC 15.7p3 поведение как у gcc.
ttldtor
А какой у него вывод на этом примере?
https://wandbox.org/permlink/nhUpwYKvNx0lPhMs
PRoSToC0der
Что такое sbo?
Small buffer optimization
PRoSToC0der
https://wandbox.org/permlink/nhUpwYKvNx0lPhMs
можно и на годболте, там же trunk есть
Igor
можно и на годболте, там же trunk есть
Действительно, спасибо.
ed
безусловно твой EdBraedVector лучше std варианта
Не буду говорить за всех, но конкретно для моих целей самопал оказался гараздо лучше, и я исхожу лишь из практических метрик, не более.. Почитайте сами почему vector, list, stack и прочих ребят из той же гвардии не используют в моделировании реального времени, благо статей этих навалом.. Ну а мне больше нечего сказать :/
ed
так чем плохи варианты пула в бустах или контейнеры из ea::stl ?
Про stl расписал выше.. Буст комментировать не буду так как уже даже не смотрел на него в виду того, что хотел профайлер всего что только можно запрофайлить..
ttldtor
Ссылочку напишу, вдруг кто-то не знает https://github.com/electronicarts/EASTL
ed
eastl не вижу где расписал
А да, лол, сейчас погуглил понял что это другое.. Короче вообще первый раз слышу про eastl
Александр
Вопрос по fmtlib: я вот всегда в неё пихал utf-8 и не парился. А это корректно или мне просто везло, что не попались символы, кусок которых равен '{' или '}'?
Alex
Народ, а никто не подскажет, является ли использование moved объекта (с помощью std::move) UB? К примеру генерирую строку, потом ее перемещаю в метод и после этого продолжаю работать с итоговой строкой как с пустой.
Aidar
Скорее это анспецифайд
Alex
Скорее это анспецифайд
То бишь implementation specific?
Aidar
То бишь implementation specific?
Ну мув это каст, вызов вполне себе дефайнд
Александр
ну в доке написано, что их надо задваивать. Везло.
Я говорю конкретно про утф8 символы из нескольких байт, внутри которых может встретиться байт, равный коду символа '{'/'}'
Constantine
Для std::unique_ptr действие его конструктора перемещения полностью defined
Alex
Это вопрос конкректного класса
Ага, окей. Понял. В таком случае пошел искать определение поведения std::string при std::move, спасибо.
Aidar
Лучше не полагайся
ttldtor
Задвоение - это другое
а, неправильно прочитал про кусок. Типа 聽 ?
Aidar
А смувай в нее пустую строку
Constantine
Для std::string Move constructor. Constructs the string with the contents of other using move semantics. other is left in valid, but unspecified state.
Constantine
Так что unspecified
Александр
а, неправильно прочитал про кусок. Типа 聽 ?
Ну да, например. Сейчас не могу проверить, насколько этот иероглиф подходит)
Aidar
str="";
Constantine
std::exchange(str, "")
Александр
не, я не правильно посмотрел это U807d === e881bd в utf8
Не суть, главное, что мысль понятна. Вопрос открыт
Constantine
байт 81 не нравится
ttldtor
http://unicode.scarfboy.com/?s=U%2B807d
Александр
Не суть, главное, что мысль понятна. Вопрос открыт
Хотя суть, суть. Хорошо бы проверить на иероглифах
ttldtor
гм, я совсем про табличку забыл
ttldtor
нет, не будет появляться 7d 7b
ttldtor
байты начинаются с 10
Александр
ttldtor
посмотри табличку
ttldtor
7b 7d может появиться только в варианте 1 байт
Александр
посмотри табличку
Хм. То есть весь ASCII (7 bit) может быть только как целый символ?
Constantine
utf8 построен так, что ошибка ограничена
Александр
Интересное свойство, не знал
Constantine
т.е. ошибка будет касаться только символов, в которых ошибка
Александр
Т.е. я в utf строке могу искать/заменять ASCII символы (в том числе группами) без умных итераторов по utf8?
Aidar
Звучит как вранье
Constantine
Звучит как вранье
там стартовый код буквы особенный
Ivan
если потеряется bom то потеряется всё, к сожалению, в т.ч. это свойство
Constantine
bom в utf8?
Constantine
!следующий
Александр
Шикааааарно