Matwey
Только я забыл где лежит первоисточник
pavel
Привет. Кто скажет какой сейчас аллокатор наиболее распространен во "всех линуксах" в libc++ в gcc и clang. Ну то есть как выглядит алгоритм ищущий кусок стоящий за вызовами new/delete.
Ioann_
На винде просто маллок, так как реаллок там бессмысленнен
Anonymous
а что там с реаллоком?
Ignat
говорят, в glibc ptmalloc2
Alexander "SonnySlave"
На винде просто маллок, так как реаллок там бессмысленнен
а можешь подробнее рассказать? мне тоже интересно 😊
Ioann_
а можешь подробнее рассказать? мне тоже интересно 😊
Ну, дело в том что реаллок в win, всегда выполняет перекопирование содержимого, за счет чего скорость его работы ~равна, простому выделению памяти в новом месте. На счет того что в msvc в new malloc, это можно и по исходникам глянуть. Ну вот как-то так.
Ioann_
Если я ничего не перепутал и не получил зарплату за Пупу
Alexander "SonnySlave"
как тогда линуксовый реаллок работает?
Ioann_
как тогда линуксовый реаллок работает?
На счет линуксового, надо посмотреть подробнее, как работает. Так как я могу и напутать. А @isenbaev не подскажет часом ль ?
Ioann_
Но вот что по винде
Ioann_
HeapReAlloc is guaranteed to preserve the content of the memory being reallocated, even if the new memory is allocated at a different location. The process of preserving the memory content involves a memory copy operation that is potentially very time-consuming.
Alexander "SonnySlave"
понятное дело, что нам не нужно перевыделять весь кусок памяти, только если у нас после нашего куса есть кусок памяти столько, сколько нам надо
Ioann_
Там возможно, дело в том сколько это стоит сделать с манеджером памяти ОСи
Alexander "SonnySlave"
так всё равно если новый кусок памяти, то копировать надо. Или ты намекаешь про разную стоимость этого самого окпирования?
Ioann_
Но у меня выходило, что реаллок, на винде даже замедлял работу. А вот на линупсе все работало быстро.
Alexander "SonnySlave"
Да, скорее всего на это и намекаю.
Смотри, что нашёл: https://blog.kowalczyk.info/article/2be/realloc-on-windows-vs.-linux.html
Alexander "SonnySlave"
тут тоже чувак жалуется, что херово реаллок под виндой работает
Alexander "SonnySlave"
http://blog.httrack.com/blog/2014/04/05/a-story-of-realloc-and-laziness/
Ioann_
Ну и заодно описывает что и почему, кажется
Ioann_
Но он на догадках пишет, конечно.
Anton
Anton
Нашел расхождение Стандарта с СипипиРеференсом
Anton
Пофиксю и можно идти спать
Alexander "SonnySlave"
вот именно в таком варианте надо выкладывать на Cppreference. Всё равно не поймут, что там написано 😊
Alexander "SonnySlave"
(пока никто русскоговорящий не придёт)
Alexander "SonnySlave"
ха, ты тоже снова не спишь
Есть два варианта : либо я сейчас иду спать и снова просыпаюсь где-то в часа два
Alexander "SonnySlave"
либо я сегодня буду налаживать свой режим. но тогда мне лучше не ложится.Сегодня я то встал в 17:00
Alexander "SonnySlave"
ха, абсолютно такой-же ризонинг )
оххх уж эти ваши англицизмы. Избавляйся, а то на ЛОРе помню жаловались на твой доклад, что им не нравилось изобилие англицизмов
Anton
забавно, что ошибка на cppreference перекочевала в книжку C++ Templates: The Complete Guide. Я сначала ее там нашел, подумал, что странно придумано. Попробовал на gcc/clang - работает по-другому. посмотрел на cppref - написано как в книжке. думал, надо пропозал писать.
Alexander "SonnySlave"
https://github.com/korken89/crect
Vladislav
https://github.com/korken89/crect
А забавная штука
Danil
Vitaliy
Спасибо! Серьезная книга! Аж 2к страниц)
Timofey
Немного оффтоп. Где можно найти людей, знающих про mailbox VMS?
Vitaliy
#book
Danil
#book
на самом деле она здесь уже была, просто вместо того чтобы искать я ее так кинул)
Vitaliy
Ну я на всякий случай пометил её
Vitaliy
Её в канале с книгами нет, кажется
Aleksandr
Vitaliy
pro.cxx.books
Vitaliy
Самая первая глава уже довольно познавательна. Оказывается std::max не может быть применён к аргументам разных типов. Ещё нет пропосала на его обощение ?
Vitaliy
То есть вот такой вызов не компилится: std::max(1.0, 1);
Ivan
То есть вот такой вызов не компилится: std::max(1.0, 1);
имхо логично, какой на выходе ты тип хочешь получить — не ясно же
Vitaliy
Если я хочу получить конкретный тип, то я воспользуюсь static_cast
Vitaliy
А так double должен вывестись
Ivan
А так double должен вывестись
это с чего такой вывод?
Vitaliy
Как тип, который вмещает в себя int и double
Ivan
Как тип, который вмещает в себя int и double
ну хз, может это и ок будет. Но опять же, написать свой вариант — 5 мин
Aidar
Как тип, который вмещает в себя int и double
там ваще нет перегрузки с разными параметрами
Anatoly
можно, ввести абстракцию Lexer (Tokenizer) и возложить это на его плечи
🐙 Antony
А вам случайно парсеры (Bison, Spirit, и тп) не подойдут для решения проблемы?
🐙 Antony
Они умеют парсить намного быстрее, чем рукописный код
Alexander
Попробуй хэш от строки посчитать и по хэшу дернуть нужный обработчик
RattenKong 🦧🐀🦍️
А вам случайно парсеры (Bison, Spirit, и тп) не подойдут для решения проблемы?
не хотите обратиться в веру господа нашего буста?
Alexey
Они умеют парсить намного быстрее, чем рукописный код
разве всегда? синтаксический спуск тоже эффективен же.
Samat
А вам случайно парсеры (Bison, Spirit, и тп) не подойдут для решения проблемы?
я ознакомлюсь. и c lexer(tokenizer) Всем спасибо. Дергать по хешу звучит неоч, но может мне так кажется
🐙 Antony
Alexander
Ну у тебя сравнение строк или сравнение хэшей
Alexander
Смотря какая строка
Alexander
И какие требования к быстродействию
Aidar
там есть некий putback но он может и не работать
Anatoly
Ну у тебя сравнение строк или сравнение хэшей
для каждого ключевого слова lexer должен вернуть уникальный идентификатор, зачем какие-то хеши?
Anatoly
вообщем, парню явно надо что-то из теории трансляции почитать и все будет гуд
Aidar
если там можно по символу автоматить то есть unget
Vitaliy
там ваще нет перегрузки с разными параметрами
Вот на мой взгляд круто было бы иметь такую. Если у кого-то есть юз кейс, где это что-то ломает, то было бы интересно на него взглянуть.
Berkus
да getline(is, str); if (str == "keyword1") process_keyword1(is); простые rec descent парсеры так и работают
Berkus
т.е. никакой push_back тут не нужен от слова саусэм
Anatoly
да getline(is, str); if (str == "keyword1") process_keyword1(is); простые rec descent парсеры так и работают
проблема может быть в process_keyword1, когда следующая считанная лексема является ключевым словом и терминатором текущей инструкции. конечно, в этом случае вопрос к дизайнерам языка, но все же.