|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|||||||
Методы оптимизации кода01.07.2011, 07:48. Показов 9168. Ответов 52
Метки нет (Все метки)
Написал статью по оптимизации кода на С++. Ее можно почитать тут:
[ссылка удалена] А вы какие еще способы оптимизации кода знаете? (я не говорю про оптимизацию алгоритмов. Речь идет про код вообще)
1
|
|||||||
| 01.07.2011, 07:48 | |
|
Ответы с готовыми решениями:
52
Методы оптимизации памяти Курсовая. Методы оптимизации |
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||||||||||||||||||||||
| 01.07.2011, 21:08 | ||||||||||||||||||||||
|
микроконтроллеры
Добавлено через 2 часа 44 минуты Касательно же циклов здесь есть гораздо более важный момент: очень желательно, чтобы к моменту начала цикла было бы известно точное количество итераций (даже вычисленное в рантайме). Это даст компилятору шанс развернуть цикл и использовать векторизацию (SIMD). Например из кода
) между scanf и printf
2
|
||||||||||||||||||||||
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|
| 29.12.2011, 08:56 [ТС] | |
|
Мной написаны еще несколько статей по написанию эффективного кода. Надеюсь они будут вам полезны:
http://itw66.ru/blog/c_plus_plus/571.html - Эффективный код на С++ http://itw66.ru/blog/c_plus_plus/491.html - Методы оптимизации памяти
0
|
|
|
|
||
| 29.12.2011, 09:17 | ||
1
|
||
|
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
|
|
| 29.12.2011, 09:28 | |
|
0
|
|
|
|
|||||
| 29.12.2011, 09:34 | |||||
Сообщение было отмечено как решение
Решение
5
|
|||||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 29.12.2011, 10:50 | |
|
Посмотрел статьи. Выглядит как предположения программиста. Не подкрепленные ничем.
Либо тут надо давать измерение времени - профиль. Либо показывать ассемблерный код. Тогда будет понятно, где выгода, а где - нет. Кроме того, возможно автор просто не умеет пользоваться оптимизатором? gcc вполне себе хорошо оптимизирует и сам проводит все ре рефакторинги, которые приводит автор. Но которые в коде гораздо менее понятны, чем исходный вариант.
0
|
|
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
||
| 29.12.2011, 13:59 [ТС] | ||
|
1. switch занимает больше места. Если нужно возвращать статические данные, то в массиве будет понятнее. 2. там могут быть разряженные значения 100, 200... (допустим статический массив на 65535 значений, который переводит индекс юникод чара в литеру в словаре символов). Тогда подобная оптимизация не сработает. 3. вы говорите про конкретную платформу и компилятор. Говорить о том, что в компиляторах под PS3, Xbox360 я бы не стал. На мобильных платформах это тоже может не сработать.
0
|
||
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|||
| 29.12.2011, 14:41 | |||
0
|
|||
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
||||||||||
| 29.12.2011, 15:10 [ТС] | ||||||||||
|
Те приемы которые я описал это информация к сведению. Если вы столкнетесь, с необходимостью оптимизации, то статьи подскажет вам некоторые варианты реорганизации кода, которые могут помочь. Некоторые пункты в статьях подходят как best practice (вроде инициализации переменных класса в списке инициализации, а не в теле конструктора. Добавлено через 9 минут
0
|
||||||||||
|
|
||||
| 30.12.2011, 10:55 | ||||
Сообщение было отмечено как решение
РешениеТакже я что-то не понял как Вы собираетесь в массив разреженные индексы заталкивать. Так же с нуля и по порядку. Иначе придется создавать заведомо больший массив. Как правило, компилятор сам выбирает что лучше (память или скорость) при использовании switch'a. switch занимает больше места? Вы имеете в виду по количеству кода? С этим тоже можно поспорить кстати. Все зависит от размера массива, его же тоже надо инициализировать. Что в своем примере Вы опустили. Плюс ко всему к случаю с массивом придется добавить проверку валидности индекса. Этого в Вашем примере тоже нет. Не поймите меня неправильно. Я не агитирую всех и всюду использовать switch. Просто все Ваши рекомендации в отрыве от контекста смотрятся бестолковыми. В любом случае я против ручной оптимизации, особенно не своевременной. Я за читабельность. Если какой-то метод смотрится красиво - я предпочту использовать его, а не другой может быть несколько более быстрый.
3
|
||||
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
||||
| 30.12.2011, 11:15 [ТС] | ||||
|
Например: у меня есть система частиц. Я хочу использовать для параметра size каждой частицы не float а 16-ти битные целые числа с фиксированной точкой. И как тут понять, это даст результат или нет? И читабельность - тоже спорное понятие, человеку который с этим знаком будет без разницы, ну а новичку будет сложно разобраться. С одной стороны - вся математика будет в целых числах. С другой стороны нужно будет иногда паковать и распаковывать данные. На практике такая оптимизация дает 30% прироста производительности за счет того, что структура начинает занимать в 2 раза меньше памяти. Но принимать решение о такой оптимизации нужно в каждом конкретном случае.
0
|
||||
|
|
||||
| 30.12.2011, 11:51 | ||||
|
Все же, как правило, прирост в эффективности достигается "алгоритмическими" (асимптотическая оценка со всеми вытекающими) оптимизациями.
0
|
||||
|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
||||
| 30.12.2011, 14:28 [ТС] | ||||
|
Вот эта статья: research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_ GCAP_09.pdf
0
|
||||
| 30.12.2011, 14:28 | |
|
Помогаю со студенческими работами здесь
53
Методы Оптимизации: Метод параллельных касательных - нужен алгоритм Просмотр кода после оптимизации компилятора Объяснить нюансы оптимизации заданного фрагмента кода Мешает ли разделение кода на объявление (.h) и определение (.cpp) inline оптимизации?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|