
Vyacheslav
31.05.2018
16:01:47

Денис
31.05.2018
16:05:01

Yura
31.05.2018
16:05:28
Друзья, добрый день! Я студент первого курса по программированию, опыта практического почти нет. Скажите пожалуйста, какие требования по знаниям для джуна? Спасибо.


Alexander
31.05.2018
16:06:36
Не пойдёт.
7.14 Functions
Function calls may slow down a program for the following reasons:
The function call makes the microprocessor jump to a different code address and back
again. This may take up to 4 clock cycles. In most cases the microprocessor is able to
overlap the call and return operations with other calculations to save time.
The code cache works less efficiently if the code is fragmented and scattered around in
memory.
Function parameters are stored on the stack in 32-bit mode. Storing the parameters on
the stack and reading them again takes extra time. The delay is significant if a
parameter is part of a critical dependency chain.
Extra time is needed for setting up a stack frame, saving and restoring registers, and
possibly save exception handling information.
Each function call statement occupies a space in the branch target buffer (BTB).
Contentions in the BTB can cause branch mispredictions if the critical part of a program
has many calls and branches.

Google

Chiveson
31.05.2018
16:06:42

Alexander
31.05.2018
16:06:57

Yura
31.05.2018
16:06:58

Alexander
31.05.2018
16:07:18
Не пойдёт.
http://www.agner.org/optimize/optimizing_cpp.pdf

Vyacheslav
31.05.2018
16:08:19

Alexander
31.05.2018
16:08:57
https://www.boost.org/doc/libs/1_67_0/doc/html/function/misc.html#id1617757
и ещё кто-то про функтор забыл

Vyacheslav
31.05.2018
16:09:50


Alexander
31.05.2018
16:10:31

Vyacheslav
31.05.2018
16:10:44

Alexander
31.05.2018
16:10:56
используешь инлайн - раздуваешь код - проседает кеш инструкций и так далее
с другой стороны вызовов меньше

Google

Alexander
31.05.2018
16:11:29
О, Спасибо!!
рекомендую к прочтению не эти книги, а все остальные. Книга по оптимизации С++ у Агнера наиболее слабая, имхо

Vyacheslav
31.05.2018
16:15:58

Денис
31.05.2018
16:28:21

Vyacheslav
31.05.2018
16:44:17

Vl@d
31.05.2018
17:20:37
А что используется в алгоритмах с++17 вместо get_temporary_buffer|? new, delete`?

test
31.05.2018
17:25:10
Хорошая книга для начинающего в c++ ?

Mr.
31.05.2018
17:31:29
кто знает встроенный метод сортировки массива по убыванию? Типо sort(a, a + n), только по убыванию?

Viacheslav
31.05.2018
17:32:14

Mr.
31.05.2018
17:32:24
Спс

test
31.05.2018
17:32:34
Спс.

Alexander
31.05.2018
17:36:35

Vl@d
31.05.2018
17:38:05
Не совсем понял вопрос
http://en.cppreference.com/w/cpp/memory/get_temporary_buffer написано, что deprecated, а что тогда использовать?

Stanislav
31.05.2018
17:41:46

Alex
31.05.2018
18:43:48
Есть вектор из объектов (с некими полями из строк и чисел)
Нужно написать программу, для поиска объектов, подходящих по заданным условиям
Т.е. может быть
[Такое-то поле (переменная) больше/меньше/равно/... Какому-то числу] И/ИЛИ [Такая-то строка равна/не равна/... чему-то]
Т.е. по сути simple sql parser
Есть какие-нить идеи элегантной реализации?
Может-быть как-то помещать нужные функции (сравнения) в вектор?
Т.е. создать функцию для
'>', '=='
А остальные сравнения - можно от этих двух вывести
Но как реализовывать оператор ИЛИ
Где-то в голове крутится элегантное решение, с уровнями вложенности и чем-то подобным
Но, не могу достать
Нет идей?

Matwey
31.05.2018
18:46:15
Для хранения данных

Google

Alex
31.05.2018
18:48:47

Alexander
31.05.2018
18:49:43

Alex
31.05.2018
18:59:52


Assasin
31.05.2018
19:14:16
Создам класс Expression. В нём 4 переменные - Expression *left, *right; bool isTrue; enum Operator { '&&', '||'}
Парсим входную строку, разрезаем на правую и левую часть - и так, пока не останется только одно вырадение (аля first>5), тогда устанавливаем isTrue
Это не сильно, кхем, плохо?
Если хочется навелосипедить свой парсер, можешь порыться в моем не очень сложном велосипеде на php: https://github.com/iassasin/phplate/blob/master/src/TemplateLexer.php
Его основная идея в том, что есть prefix операторы, infix и postfix, у каждого есть свой уровень, который учитывается при поиске обработчика этого оператора (функция findOperator). Начинать погружение в парсер можно с функции parseExpression.
Вот тут я его еще пытался перенести на плюсы, но тут только абстрактная реализация: https://github.com/iassasin/configen/blob/master/src/parser/synparser/lexer_expression.hpp
По идее, если определить к нему таблицу операторов с уровнями и их обработчики, должно заработать, но я не проверял, время как то кончилось, некогда было велосипедить дальше.
В общем, если будет полезно, прошу.


Alex
31.05.2018
19:39:44
А вообще что бы лезть в такие вещи желательно для начала разобратья с теорией формальной грамматики, позыркать примеры

Igor
31.05.2018
19:50:25
почитай дракона
Зачем? Генерируешь лексер и пишешь парсер через рекурсивный спуск (как парсят большинство реальных языков), никакой особой теории тут не надо.

Matwey
31.05.2018
20:01:58
А чо парсер?
Вы считаете что язык запроса из парсера состоит?
А планировать исполнение вы не собираетесь?

Assasin
31.05.2018
20:09:47
ну прежде чем что-то планировать, сначала нужно спарсить, что именно
планировать - это уже отдельная сложная задача, конечно

Matwey
31.05.2018
20:10:34
Ну lex/bison поможет
И можно планировать! :)

Assasin
31.05.2018
20:11:06
ну Alex хочет свой велосипед для парсера)

Matwey
31.05.2018
20:11:17
Пусть хочет велосипед для планировщика!
Это интереснее

ILIK
31.05.2018
22:15:11
есть кто не спит ?

Igor
31.05.2018
22:18:16

Ilia
01.06.2018
04:59:39

Google

Axbor
01.06.2018
05:05:26

Kirill
01.06.2018
05:17:32
Вопрос на самом деле очень странный.
Std function хранится в куче, и на создание идет оверхед, но он минимален.
Во время вызова тот же самый косвенный вызов получается. Все пользуются виртуальными функциями и не говорят что прям оверхед ппц.
А вторая часть вопроса.
Инлайн дает 0 оверхед, это даже не вызов, по этому вопрос ВО СКОЛЬКО БОЛЬШЕ дает ответ в бесконечность. Любой даже минимальный оверхед будет в бесконечность раз дольше.
Правило следующее, не париться перформансом пока не припрет, читаемость и масштабируемость на начальных этапах важнее чем мнимый перформанс

Spoonson
01.06.2018
05:24:32
инлайн дает оверхед из-за раздуваемого кода, он начинает хуже в кэш попадать. Так что оверхед (по крайне мере, иногда) бывает.

Alex
01.06.2018
05:28:28

Ilia
01.06.2018
05:35:35

Stanislav
01.06.2018
05:39:48

Ilia
01.06.2018
05:39:53
Профи т

Alex
01.06.2018
05:40:34
Сам не пробовал, но говорят что оптимизации, особенно низкоуровневые с asm вставками помогают быть ценным и незаменимым сотрудником в буквальном смысле.

Denis
01.06.2018
05:41:13

Stanislav
01.06.2018
05:43:25
уж лучше написать гору непортабельного кода на асме

Alex
01.06.2018
05:45:24
банальщина, это даже ЧСВ не потешит и пацанов не удивишь

Spoonson
01.06.2018
06:39:03

Ilia
01.06.2018
06:41:01
Что ж непонятно?
Inlinening ускоряет, я объясняю почему

Spoonson
01.06.2018
06:43:05
но обьяснение про попадание в кэш подходит и не к заинлайненой функции

Kirill
01.06.2018
06:59:14

/dev
01.06.2018
07:00:27

Google

Kirill
01.06.2018
07:00:44
Что ж непонятно?
Тут имелся ввиду например инлайн вызов при луп анролинге, там простыня вызовов будет

Ruslan
01.06.2018
07:01:42

Kirill
01.06.2018
07:02:41

Stanislav
01.06.2018
07:03:22

/dev
01.06.2018
07:05:05

Alexander
01.06.2018
07:08:00
ЗАТО БЫСТРЕЕ!!!1!
написал кучу кода на асме, и тебя не уволят

Andre
01.06.2018
08:36:51
Ух ё, кто пришел!

Ilia
01.06.2018
08:38:34

Matwey
01.06.2018
08:39:24
Не понято как кэш должен догадваться об том что это одно и то же.

Spoonson
01.06.2018
08:39:58

Ilia
01.06.2018
08:40:04
НЕЗАинлайненная фукция будет просто в одном экземпляре. Её не нужно 20 раз подгуржать. ЗАинлайненная будет в 20-30 экземлярах а код один и тот же, подгружать в кэш не надо...

/dev
01.06.2018
08:44:18

Matwey
01.06.2018
08:46:20
Да даже если код один и тот же, я пока не понял до конца. Разве кеш инструкций не просто на адрес ориентируется при работе? Там есть дедубликация?

Ilia
01.06.2018
08:46:35
инлайн дает оверхед из-за раздуваемого кода, он начинает хуже в кэш попадать. Так что оверхед (по крайне мере, иногда) бывает.
Вообще, это с моей стороны был гон чистой воды, но и вы,братья, хороши. Как же можно нести такую чушь, что inline раздувает код и даёт оверхед, что он в кэш хуже попадает, и (подразумевается) что изза этого становится медленнее ?
Кэш -- вообще штука непредсказуемая, поэтому его влияние на скорость работы кода обсуждать практически бессмысленно. У программиста нет средств влият на то, будет загружен код или данные в кэш.
По факту inlining -- один из самых эффективных методов оптимизации, потому что он УБИРАЕТ ПРОЛОГ И ЭПИЛОГ маленьких функций и работает в более благоприятном как раз для кэшей режиме.