Size: a a a

2021 July 06

АР

Андрей Руссков... in pro.cxx
вся идея плагинов в том, что их можно включать/выключать
источник

АР

Андрей Руссков... in pro.cxx
и что приложение может работать без части плагинов
источник

АР

Андрей Руссков... in pro.cxx
может быть полезно например если у вас разным клиентам нужен слегка разный функционал одного и того же приложения
источник

АР

Андрей Руссков... in pro.cxx
или можно понаписать разработческих плагинов с годмодами, а релизную сборку делать уже без них
источник

АР

Андрей Руссков... in pro.cxx
или просто сделать приложение расширяемым сторонними пользователями
источник

АР

Андрей Руссков... in pro.cxx
вариантов тьма короче
источник

D

Dillinger Daz in pro.cxx
привет, столкнулся со странным моментом. В общем, у меня есть функции:
    Storage::StorageRecord* find(std::string_view name) const
   {
       auto it = m_inner_scopes.find(crc32::create(name.data()));
       if (it == m_inner_scopes.end() || it->second.depth > m_scope_depth)
           return nullptr;
       return &it->second;
   }
std::shared_ptr lookup(std::string_view name) const
   {
       auto found_data = find(name);
       if (found_data)
           return found_data->payload;
       else
           throw SemanticError("Variable not found: " + std::string(name));
   }


и огромный процент процессорного времени съедает __cxa_throw. Хотя в действительности исключения из неё не кидается ни разу во время выполнения. Почему это работает так медленно?
источник

D

Dillinger Daz in pro.cxx
__cxa_throw ещё тащит за собой _Unwind_Resume, которая тоже почему-то очень дорогая по времени. Мб внутри STL где-то обрабатываются исключения и это так бъёт по скорости?
источник

АР

Андрей Руссков... in pro.cxx
значит где-то внутри этого безобразия у тебя кидаются и ловятся исключения. Ищи, тут тебе без конкретики не подскажут
источник

SS

Sergey Skvortsov in pro.cxx
Сделай break __cxa_throw, раз она выполняется
Исключения катастрофически дорого выбрасывать, это правда
источник

D

Dillinger Daz in pro.cxx
Просто у меня куча других бросающих функций, и они выполняются в сотни раз быстрее чем эта
источник

D

Dillinger Daz in pro.cxx
здесь какой-то затык, который я не могу обнаружить даже в профилировщике
источник

SS

Sergey Skvortsov in pro.cxx
В этом коде проблем нет, они где-то рядом
источник

SS

Sergey Skvortsov in pro.cxx
Как процессорное время замеряли?
источник

SH

Serhii Herashchenko in pro.cxx
вряд-ли конечно, но может аллокация стринги отжирает?
источник

D

Dillinger Daz in pro.cxx
профилировщик в QtCreator
источник

SS

Sergey Skvortsov in pro.cxx
Ну ищите, где кидаются эти исключения
источник

АР

Андрей Руссков... in pro.cxx
если аллокация строки кидает bad_alloc, он бы где-то ловился
источник

SH

Serhii Herashchenko in pro.cxx
ну я про то, что может где-то внутри бросается исключение со стрингой и ловится потом
источник

SH

Serhii Herashchenko in pro.cxx
но стринга аллоцируется
источник