![]() |
Какая переменная быстрее?
У меня компилятор Borland Builder 5.0.
При расчетах думаю как повысить производительность кода, в связи с чем и возник вопрос. В программном коде много условий приведенных ниже. Как вы думаете переменная массива "ap1[i]" медленнее "p1" (обе типа int)? Если переменная массива медленнее, то разумнее ли в начале цикла можно переменную цикла присвоить обычной переменной и уже сней работать? Хотя есть предположение, что сам компилятор все делает как нужно и ничего менять не нужно... В общем хотелось бы ясности в этом вопросе (эсперементировать не хотлось бы, код очень большой). Код:
(p1==ap1[i] && p6==ap6[i]) |
Цитата:
Цитата:
Должно несколько ускорить сравнение использование скобок () для всех сравнений с условием && и || Поставить по две скобки до оператора или - || и после него по две. Объединив условия и - && в группы. Код:
(p1==ap1[i] && p6==ap6[i] && p2==ap2[i] && p3==ap3[i] && p4==ap4[i] && p5==ap5[i]) || (p2==ap3[i] && p3==ap4[i] && p4==ap5[i] && p5==ap2[i]) |
Условие не удасться ускорить, так я привел только первые три строчки, а на самом деле таких 660 (в одном if), причем они логически связаны между собой.
|
Ferum01, Так а что, если проанализировать, наиболее редкое сравнение значений, которое истинно и поставить его в начале каждого условия, потому что при условии и - && сравнение идёт до первого истинного, а к примеру, 9 сравнений - истино, а 10 - ложно, то лучше поставить наоборот. А для операции или - || лучше поставить первым то сравнение, которое встречается наиболее чаще.
|
посчитай статистику функцией
Код:
map<string,pair<int,unsigned> > __calc_stats; чтобы переупорядочить их. |
Ferum01, возможно вам следует вынести наиболее тяжелые вычисления в отдельную dll
и собирать ее другим, более новым и лучшим компилятором (Intel, Ms VS). Или же, как минимум, поиграйтесь с уровнями оптимизации компилятора Buildera |
если посмотреть дизасмом, то обе переменные стековые указатели. А после оптимизации они становятся регистровыми с обрашением в раздел .data. Советую не пытаться ререхитрить компилятор, а посмотреть лит-ру по быстрой сортировке :)'
|
Цитата:
p1 - стековая переменная с фиксированным смещением - читается одной командой ap1 [i] - стековая переменная со смещением, определяемым суммой начала массива (ap1) и значения индекса (i * 4). Однако процессор вполне в состоянии прочитать и это одной командой. Причём, в "релизном" режиме со включенной оптимизацией компилятор сам определит оптимальную последовательность команд. P.S. Цитата:
Судя по всему, эти шесть значений описывают какой-то объект, а шесть массивов - массив объектов. В таких случаях проще объединить их в "структуру", и в этой структуре определить оператор "==" - функцию, которая будет выполнять рассматриваемое условие проверки. |
Время: 09:06. |
Время: 09:06.
© OSzone.net 2001-