Я пытался выяснить, быстрее ли давать функцию аргумент или просто использовать переменные-члены. У меня есть следующий код.Member Variable vs. Function Аргумент
class Variable
{
private:
public:
Variable() {}
~Variable() {}
struct
{
static const int test = 3;
}testVar;
};
class VariableTransmit
{
private:
Variable var;
public:
VariableTransmit() {}
~VariableTransmit() {}
void testFunc1(int test)
{
int foo = 2;
foo = test;
}
void testFunc2()
{
int foo = 2;
foo = var.testVar.test;
}
};
struct
{
static const int test = 3;
}extVar;
int main(void)
{
VariableTransmit transmit;
clock_t prgstart, prgend;
prgstart = clock();
for(int i = 0; i <= 10000000; i++)
{
transmit.testFunc1(extVar.test);
}
prgend = clock();
printf("delivered: %.5f seconds\n\n", (float)(prgend - prgstart)/CLOCKS_PER_SEC);
prgstart = clock();
for(int i = 0; i <= 10000000; i++)
{
transmit.testFunc2();
}
prgend = clock();
printf("member: %.5f seconds\n\n", (float)(prgend - prgstart)/CLOCKS_PER_SEC);
return 0;
}
Я протестировал этот код, и к моему удивлению testFunc1 и testFunc2 имеют идентичную скорость обработки. Я думал, что testFunc1 будет быстрее, поскольку он получает значение как аргумент из структуры и просто должен его установить, в то время как testFunc2 должен получить доступ к объекту var, а затем получить значение из структуры внутри объекта. Является ли это оптимизацией для компилятора (я использую VS2010 кстати), или я просто что-то пропустил?
Редактировать: Убрано второе задание на то, чтобы быть основанным на мнениях.
У вас включена оптимизация? Каковы были ваши результаты? – NathanOliver
Я бы не удивился, если компилятор полностью исключает обе петли. Я хотел бы видеть тайминги, которые у вас есть, или сгенерированный код ассемблера. –
У меня нет специального флага оптимизации. Я не знаю, устанавливает ли vs2010 оптимизацию по умолчанию. Если нет, то никакой оптимизации. Оба, где в 0,023 сек. – YokeM