Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186

Оптимизация

15.08.2020, 12:10. Показов 2718. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день у меня есть выбор постоянно разыменовывать указатели их в коде около 50 штук. И у меня стоит выбор раскидать по функциям где будет использоваться не "->", а "." или оставить как есть какой вариант быстрее? И будет ли толк от __forceinline если раскидать по функциям и использовать "class.method" вобщем прямой доступ к полю? Скорость программы критична прям вообще край)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2020, 12:10
Ответы с готовыми решениями:

оптимизация
какие 5 способов оптимизации?

Оптимизация
Здравствуйте! Решаю задачи на e-olymp. Подскажите, пожалуйста, как ускорить работу этой программы ? Входные данные В первой...

Оптимизация
Условие задачи: Как известно, красить забор Тому Сойеру помогали многочисленные друзья. Каждый друг покрасил неcколько подряд идущих...

26
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
15.08.2020, 12:28
Ничего не понятно. Каким образом "раскидывание по функциям" может привести к использованию . вместо ->? Доступ через ссылку вместо доступа через указатель? На производительность это никак не повлияет.
0
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
15.08.2020, 12:43  [ТС]
Нет не через ссылку. Я знаю что на разыменование указателя расходуется ресурсы и время. Данные лежат в структуре структура передается через указатель для получения доступа к полям соответсвенно применяется разыменование "->" операций с этими данными много около 10-20 на каждый участок всего их 5. Я думаю что будет быстрее и лучше добавить в структуру функции и разыменовывать только функции. Выходит что доступ у структуры будет прямой через "." . Что лучше по производительности оставить как есть или все операции раскидать по функциям???
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 13:54
del

Добавлено через 1 час 6 минут
Цитата Сообщение от warcraft33 Посмотреть сообщение
или все операции раскидать по функциям???
можете показать код-пример что вы имеете ввиду?

Добавлено через 2 минуты
Просто например
C++
1
void foo(bar * a) {...}
и
C++
1
void foo(bar & a) {...}
грубо говоря, не имеют разницы , а это всё что мне приходит в голову
0
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
15.08.2020, 14:07  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Вот что я имею ввиду какой вариант быстрее и лучше
///////////////////////////////////////////
//VARIANT 1 "->"
struct var1
{
    int a=1;
    int b=2;
    int c=3;
    char d=4;
}
 
void fx(var1 *v)
{
    //...
    //КУЧА КУЧА КУЧА ТАКИХ ШТУК
    v->d += v->a;
    v->b += v->d;
    v->c += v->c;
    //...
}
 
int main()
{
    var1 v;
    fx(&v);
    return 0;
}
///////////////////////////////////////////
//VARIANT 2 "."
 
struct var1
{
    int a=1;
    int b=2;
    int c=3;
    char d=4; 
 
    void operation() //А если сверху еще добавить __forceinline?
    {
        v.d += v.a;
        v.b += v.d;
        v.c += v.c;
    }
}
 
void fx(var1 *v)
{
    //...
    //КУЧА КУЧА КУЧА ТАКИХ ШТУК
    v->operation();//Так будет быстрее или нет? Ведь разыменования не происходит
    //...
}
 
int main()
{
    var1 v;
    //...
    fx(&v);
    return 0;
}
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2020, 14:31
Да думаю разницы никакой, а вообще стоит ассемблерный код стоит посмотреть.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 14:35
Лучший ответ Сообщение было отмечено warcraft33 как решение

Решение

Вот вам ссылка, а теперь сравните, в чём разница между
Цитата Сообщение от warcraft33 Посмотреть сообщение
void operation()
и
Цитата Сообщение от warcraft33 Посмотреть сообщение
void fx(var1 *v)
кроме названия?
1
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
15.08.2020, 14:50  [ТС]
AndryS1, Выходит они совершенно одинаковые!!! Огромное спасибо)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
15.08.2020, 19:27
Цитата Сообщение от warcraft33 Посмотреть сообщение
C++
1
2
3
4
5
6
    void operation() //А если сверху еще добавить __forceinline?
    {
        v.d += v.a;
        v.b += v.d;
        v.c += v.c;
    }
Не понял. К какому v вы осуществляете доступ здесь? Здесь нет никакого v.
0
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
15.08.2020, 20:43  [ТС]
TheCalligrapher, а там прямой доступ (без ".v"). Я случайно написал забылся))
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
15.08.2020, 20:57
Цитата Сообщение от warcraft33 Посмотреть сообщение
а там прямой доступ (без ".v"). Я случайно написал забылся))
"Прямой доступ" к полям класса в методе класса - это на самом деле ни что иное, как сокращенная форма записи для доступа через указатель this. То есть, например,

C++
1
2
3
4
5
6
void operation()
{
  d += a;
  b += d;
  c += c;
}
это лишь сокращенная форма записи для

C++
1
2
3
4
5
6
void operation()
{
  this->d += this->a;
  this->b += this->d;
  this->c += this->c;
}
Так что, как видите, и здесь вы осуществляете доступ через указатель this при помощи все того же оператора ->. То есть этим вы ничего не изменили вообще.

(Правильнее говорить: (*this).d, (*this).a и т.д. но в данном конкретном случае это не принципиально)
0
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
15.08.2020, 21:54  [ТС]
TheCalligrapher, ого откуда такая информация?)) Где Вы все берете эти тонкости?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
15.08.2020, 22:01
Цитата Сообщение от warcraft33 Посмотреть сообщение
ого откуда такая информация?)) Где Вы все берете эти тонкости?
Это вообще-то совсем не "тонкости", а фактически азы практического С++. Именно так - через скрытый параметр-указатель this - работают методы классов.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
16.08.2020, 04:17
Мне кажется, ты вообще не через то место пытаешься
Цитата Сообщение от warcraft33 Посмотреть сообщение
Скорость программы
поднять.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
16.08.2020, 22:21
Лучший ответ Сообщение было отмечено sourcerer как решение

Решение

Цитата Сообщение от warcraft33 Посмотреть сообщение
ого откуда такая информация?)) Где Вы все берете эти тонкости?
Возможно это страшная тайна, но если не пытаться разбираться в языке по отрывочной информации в интернете на форумах и youtube, а открыть нормальную книгу, то окажется, что все эти "тонкости" там присутствуют.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.08.2020, 22:28
Цитата Сообщение от Nishen Посмотреть сообщение
Мне кажется, ты вообще не через то место пытаешься
Я бы сказал тут попытка экономить на спичках.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
16.08.2020, 23:01
Я никогда не занимался таким, но думается мне, что тебе нужно копать в сторону профилирования, но опять же, это стоит делать, когда уже есть какой-то работоспособный результат приложения.
1
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
18.08.2020, 09:31  [ТС]
Avazart, Ваши варианты? Может предложите что то более серьезнее?)
0
фрилансер
 Аватар для Алексей1153
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
18.08.2020, 09:47
warcraft33, нескромный вопрос: а программа уже написана и работает?
0
3 / 4 / 3
Регистрация: 23.04.2017
Сообщений: 186
18.08.2020, 10:01  [ТС]
Да, если это можно назвать программой))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2020, 10:01
Помогаю со студенческими работами здесь

Оптимизация
Пожалуйста, оптимизируйте код: #include<iostream> using namespace std; int main() { int counter; cin>>counter; ...

Оптимизация
Мне нужно на определенную часть программы дать указание компилятору не оптимизировать эту часть. Может кто знает как это сделать???? ...

Оптимизация программы
Ув. обыватели, Вчера написал "Калькулятор", но так как я ещё зеленый в программировании на С++, прошу вас показать как и где можно...

Оптимизация кода
Помогите оптимизировать код. суть программы такая, принимает на вход колличество бегунов и в массив записывает их координаты, потом...

Оптимизация программы
Нужно, чтобы программа случайным образом придумывала число от 1 до 32767 и печатала его цифры через 2 пробела. (Например, 4236 печатает 4 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru