Является ли использование встроенных функций и функций #define устаревшим?
Я обычно вижу в высокоскоростном кодировании использование #define и встроенных функций для ускорения программ.
Я сделал несколько тестов скорости, и в результате эти усилия бесполезны в windows.
#Define полезен только для меня в linux, но я тестировал его на старом компьютере с частотой 1 ГГц.
Вот результаты:
Цитата:Windows7 Intel 3,5 ГГц
Режим релиза:
#define = 1.009 наносекунд/операция
функция = 0,997 наносекунды / операция
встроенная функция = 1,031 наносекунды / операция
Режим отладки:
#define = 3,467 наносекунды / операция
функция = 11,09 наносекунд/операция
встроенная функция = 11,81 наносекунды / операция
Линукс АМД 1ГГц:
#define = 10,06 наносекунды / операция
функция = 14,28 наносекунды / операция
встроенная функция = 13,20 наносекунд/операция
Что я уже пробовал:
Он был скомпилирован в linux с использованием: gcc-std=c++11 -lstdc++ - o prue define_timing.cpp
Я попробовал следующий код:
#include <iostream> #include <chrono> using namespace std; #define INLIMIT2(x,xmin,xmax) ( (x)<(xmin) ? (xmin) : ((x)<(xmax) ? (x) : ((xmax)))) double inlimit2(double x, double xmin, double xmax) { if (x < xmin) return xmin; else if (x >= xmax) return xmax; return x; } inline double inlimit3(double x, double xmin, double xmax) { if (x < xmin) return xmin; else if (x >= xmax) return xmax; return x; } int main() { const int top=1000000000; double *x=new double[top]; int i; for (i = 0; i < top; i++) x[i] = 1.01*i; time_t ini, fin; double x2 = 0.0; cout << "Test using #define:" << endl; x2 = 0.0; ini = clock(); for (i = 0; i < top; i++) x2 += INLIMIT2(x[i], 10.0, 100.0); fin = clock(); cout << "Time/op=" << 1e9 / top*(1.0*fin - ini) / CLOCKS_PER_SEC << " nanoseconds/operation" << endl; cout << "Result=" << x2 << endl; cout << "Test using function:" << endl; x2 = 0.0; ini = clock(); for (i = 0; i < top; i++) x2 += inlimit2(x[i], 10.0, 100.0); fin = clock(); cout << "Time/op=" << 1e9 / top*(1.0*fin - ini) / CLOCKS_PER_SEC << " nanoseconds/operation" << endl; cout << "Result=" << x2 << endl; cout << "Test using inline function:" << endl; x2 = 0.0; ini = clock(); for (i = 0; i < top; i++) x2 += inlimit3(x[i], 10.0, 100.0); fin = clock(); cout << "Time/op=" << 1e9 / top*(1.0*fin - ini) / CLOCKS_PER_SEC << " nanoseconds/operation" << endl; cout << "Result=" << x2 << endl; delete x; cout << "=== END ===" << endl; getchar(); return 1; }