|
19 / 10 / 0
Регистрация: 01.07.2011
Сообщений: 25
|
|||||||
Методы оптимизации кода01.07.2011, 07:48. Показов 9287. Ответов 52
Метки нет (Все метки)
Написал статью по оптимизации кода на С++. Ее можно почитать тут:
[ссылка удалена] А вы какие еще способы оптимизации кода знаете? (я не говорю про оптимизацию алгоритмов. Речь идет про код вообще)
1
|
|||||||
| 01.07.2011, 07:48 | |
|
Ответы с готовыми решениями:
52
Методы оптимизации памяти Курсовая. Методы оптимизации |
|
2383 / 1667 / 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 оптимизации?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|