sum1ptr рассматривают все индексы, это не относится к sum2ptr , когда n нечетно, поэтому, конечно, они не вычисляют одно и то же значение
Если я немного изменю ваш код для печати используемых индексов:
#include <stdio.h>
#define sum2ptr(n) {\
for (int i = 0, j = n-1; i < j; i++, j--) { \
printf("sum2 %d %d\n", i, j); \
} \
}
#define sum1ptr(n) {\
for (int i = 0; i < n; i++) \
printf("sum1 %d\n", i); \
}
int main()
{
sum2ptr(3)
sum1ptr(3)
return 0;
}
Выполнение:
sum2 0 2
sum1 0
sum1 1
sum1 2
sum2 не посмотрите на индекс 1.
Если вы получаете доступ к 2 записям в каждом повороте, размер должен быть четным числом. Если вы посмотрите на 3 записи в каждом повороте, размер должен быть кратным 3 и т.д. Об ошибке я уже сигнализировал.
Если я скомпилирую в O2 на raspberrypi pi , немного изменив код, чтобы можно было выбирать регистр в зависимости от наличия аргумента ( argc ] равно 1 или 2), результат:
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000011
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000009
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000009
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000013
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000014
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000008
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000012
pi@raspberrypi:/tmp $ ./a.out
sum1 0.000007
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000011
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000007
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000009
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000008
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000008
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000010
pi@raspberrypi:/tmp $ ./a.out 1
sum2 0.000009
разница времен меньше точности
Как насчет того, чтобы читать счетчик производительности запросов/секунда ASP.NET на удаленной машине?
Система. Диагностика. Класс PerformanceCounter имеет конструктора, который берет название машины.