valgring --callgrind, же.. но а то что показано это просто ересь , надеюсь объяснять не надо почему но что-то мерить на с++ это пустое, язык вообще на скорость не заточен.
@vividbwАй бұрын
@@igorseledtsov7345 про инструменты профилирования обязательно когда-нибудь выпущу отдельный ролик. Здесь же я про бенчмаркинг, который мои студенты могли бы использовать в своих лабах А на чем основана ваша убежденность в том, что C++ на скорость не заточен?
@igorseledtsov7345Ай бұрын
@@vividbwЕсли серьёзно, то в том что используются классы то есть обоащение по указателю к данным (как этот указатель не обзывай) можно конечно и с поинтарами работать почти без издержек не спорю но когда вы вы вызываете очередной new данные аллоцируются бог знает где и бог знает как (и да я знаю что и с этим можно бороться) и далее обращение к этой прелести вызывает каскад проблем 1 загрузка поинтера в регистры 2 оброщение по поинтеру (что уже не сахар) как правило тут имеет тлб и кеж промах примерно так и зная всё это и библиотека С++ пишется на отвали, всё равно же всё тормозиn например (только один пример)работа с короткими строками (до 600) по сравнению с Си медленне в 40 раз с длинными (до 2000 )в 2-3 раза , с очень длинными ну без разницыю если честно. и так куда не ткни.. Я не критякую язык, он ясен понятен позволяет делать меньше багов Но скорость это не его конёк. Хотя конечно по сравнению с Явой или питоном это ракета
@vividbwАй бұрын
New используется только при выделении объектов в куче. Обычные экземпляры классов, как и структуры, аллоцируются на стеке (их внутренние поля могут выделять память в куче, например string или vector). Легковесные объекты с тривиальным деструктором могут быть разложены в регистры при передаче в функцию по значению. В C++ есть RAII, который делает удобным управление ресурсами, в отличие от C, где приходится во всех точках выхода из функции явно освобождать ресурсы, либо делать единую точку выхода с переходом в нее с помощью goto. Язык C требует больше когнитивных усилий, чтобы написать надежный код. В C++ всегда можно спуститься на уровень ниже. Ну а шаблоны позволяют избегать дублирования кода и дают больше возможности оптимизатору. Например, та же стандартная сортировка будет на C++ работать быстрее qsort за счет избавления от вызовов компаратора по указателю.
@igorseledtsov7345Ай бұрын
@@vividbw Да да даб Но если спксться то это уже будет не С++ Шаблоны кстати прекрасно реализуются на Си но более трудоёмко, не срорю.. Я бы из Си++ шаблоны вообще убрал.. Вреда больше чем пользы А сортировка хороший пример того почему не нао бездумно использовать шаблоныю Всё хорошо пока сортируем простые типы а как только начинаем сортировать ытруктурыюю то уже там оптимальное их копиорвание не может быть бфть выполнено как c=a a=b b=c// Таки да С++ это для быстроты написания, но не для эффиктвности
@vividbwАй бұрын
@@igorseledtsov7345 звучит как вызов. Сортировку больших структур можно свести к сортировке указателей (с кастомным компаратором), что на C++ решается легче, чем на C, и работать будет быстрее за счет инлайнинга шаблонов) Предлагаю взять задачу какую-нибудь, которую можно за пару часов написать. И сравнить скорость работы си с си++ вариантом. Вы решите на Си, а я на C++. Результаты опубликую у себя на канале.