Если вы действительно пытаетесь проверить работу фрагмента кода (в данном случае "j++;"
), вам лучше сделать следующее:
1 / Делайте это в двух отдельных исполняемых файлах, поскольку существует вероятность того, что положение в исполняемом файле может повлиять на код.
2 / Убедитесь, что вы используете процессорное время, а не истекшее время (я не уверен, что дает "tsc_readCycles_C()"
). Это сделано для того, чтобы избежать ошибочных результатов от процессора, загруженного другими задачами.
3 / Отключите оптимизацию компилятора (например, "gcc -O0"
), чтобы убедиться, что gcc
не содержит каких-либо необычных вещей, которые могут исказить результаты.
4 / Вам не нужно беспокоиться о volatile
, если вы используете фактический результат, такой как размещение:
printf ("%d\n",j);
после цикла или:
FILE *fx = fopen ("/dev/null","w");
fprintf (fx, "%d\n", j);
fclose (fx);
если вы вообще не хотите выводить. Я не могу вспомнить, был ли volatile предложением для компилятора или принудительным.
5 / Итерации по 5000 кажутся немного низкими, где «шум» может повлиять на показания. Может быть, более высокое значение будет лучше. Это может не быть проблемой, если вы рассчитываете больший фрагмент кода и просто включили "j++;"
в качестве заполнителя.