Понятно, что сейчас будет взрыв негодования , но все же …
Где взять код который подсчитает + - кол-во тактов которые затрачены процессором на блок с операциями ( пусть и примерно)
В интернете полно , я попробовал 4-6 штук разных в той или иной вариации
но гложат меня сомнения , что они считают , что нужно
пример кусок одно из наиболее приблеженных к действительным значениям
L1 = micros();
L2 = micros()-L1;//Вычисление длительности пустой операции
x1+=x1;//Операция для которой вычисляется количество тиков
L3 = micros()-L1-L2;//Вычисление длительности операции
L4 += L3;//Добавление длительности операции к счеткику общей длитильности
вроде как все правильно , все считается …ответ 64 тика , но
добавляю
L1 = micros();
L2 = micros()-L1;//Вычисление длительности пустой операции
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
x1+=x1;//Операция для которой вычисляется количество тиков
L3 = micros()-L1-L2;//Вычисление длительности операции
L4 += L3;//Добавление длительности операции к счеткику общей длитильности
ожидаю увидеть 64 * кол-во моих вставок… и оп - а так и осталось 64 ,
Сижу чешу репу , в чем прикол…
остальные программы смысл примерно такой-же , если не добавлять что нить значительное то такты не меняются… не если конечно добавить делай или печать в порт безусловно цифра изменится , но она также должна измениться и на мою вставку , считается то не время а по утверждениям авторов колво тактов процессора
{
L1 = micros();
L2 = micros()-L1;//Вычисление длительности пустой операции
x1+=x1;//Операция для которой вычисляется количество тиков
int t=300;
t=t/60;
L3 = micros()-L1-L2;//Вычисление длительности операции
L4 += L3;//Добавление длительности операции к счеткику общей длитильности
}
теже 64 такта … Туто поведение нормальное
Усложним задачу
{
L1 = micros();
L2 = micros()-L1;//Вычисление длительности пустой операции
x1+=x1;//Операция для которой вычисляется количество тиков
int t=300;
t=t/60;
for (int y=0;y<100;y++)t=t+1;
L3 = micros()-L1-L2;//Вычисление длительности операции
L4 += L3;//Добавление длительности операции к счеткику общей длитильности
}
{
L1 = micros();
L2 = micros()-L1;//Вычисление длительности пустой операции
x1+=x1;//Операция для которой вычисляется количество тиков
int t=300;
t=t/60;
for (int y=0;y<100;y++)t=t+L2;
L3 = micros()-L1-L2;//Вычисление длительности операции
L4 += L3;//Добавление длительности операции к счеткику общей длитильности
}
@romansochi , Вы читаете ответы или так, просто решили высказаться?
Прочитайте первый же ответ, если еще не прочитали, в нем содержится объяснение происходящему.
Вкратце: если Вы не используете результат какой-либо операции, то компилятор ее вырежет с чистой совестью.
Способ борьбы: например, распечатать результат исследуемой операции.
Есть и другие варианты.
Можете также ознакомиться:
Сделайте переменные volatile
volatile int g=0;
volatile float t=300;
А в целом.
Если вам нужно время выполнения используйте таймер он вас не обманывает. Или микрос (микрос с потерей точности).
Если вопрос Почему такое время - то смотрите листинг. И читайте про оптимизацию.