Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 14:55   #1
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию скорость работы указателей на функцию

Устроил небольшой тест для выяснения скорости работы указателей на функцию и немного офигел. В простейшем примере успользование указателей увеличило время работы ~в 5 раз. Это вообще нормально? Их более цивильные собраться виртуальные функции на таком же примере показале отставание всего в 3%. Вот код:
Код:
#define BORDER 50000

unsigned long inline plus( const unsigned long& n1, const unsigned long& n2)
{
	return n1 + n2;
}


int main()
{
	unsigned long (*pF)( const unsigned long&, const unsigned long&);
	pF = +
	
	unsigned long
		sum1 = 0,
		sum2 = 0;
	
	double
		result1,
		result2;

	time_t begin, end;

	begin = std::clock( );
	
	for( unsigned long i = 1 ; i < BORDER; ++i )
		for( unsigned long j = 1 ; j < BORDER; ++j )
			sum1 += plus( i, j );
	
	end = std::clock( );
	result1 = (double)(end - begin) / CLOCKS_PER_SEC;
	cout << "without pointer:" << result1  << endl;
	cout << "sum = " << sum1 << endl;
	

	cout << endl;

//--------------------------------------------------------------------------------------
	begin = std::clock( );
	
	for( unsigned long i = 1 ; i < BORDER; ++i )
		for( unsigned long j = 1 ; j < BORDER; ++j )
			sum2 += pF( i, j );
	
	end = std::clock( );
	result2 = (double)(end - begin) / CLOCKS_PER_SEC;
	cout << "with pointer:" << result2  << endl;
	cout << "sum = " << sum2 << endl;

	cout << "\nwithout pointer is " << ( result2 - result1 ) / result1 * 100 << "% faster\n";

	return 0;
}

Последний раз редактировалось coinkrsk; 31.10.2010 в 14:59.
coinkrsk вне форума Ответить с цитированием
Старый 31.10.2010, 15:12   #2
_ILYA_
Пользователь
 
Аватар для _ILYA_
 
Регистрация: 12.10.2010
Сообщений: 79
По умолчанию

производительность функции растет вместе с ее размерам, но при любых обстоятельствах не может достигнуть inline. Если ты хочеш максимум скорости то тогда писать надо в asm
Имею хитрый план по личному обогащению
_ILYA_ вне форума Ответить с цитированием
Старый 31.10.2010, 15:23   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а ничего что вы сравнили указатели с инлайном?
а не указатели с простым вызовом.

в среднем указатель производительность сильно не понижает.(сомневаюсь про 3%, думаю меньше)

естественно что не стоит их пихать куда не попадя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2010, 21:13   #4
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Без инлайна так же, но это, наверное, срабатывает оптимизация. А вообще - такой результат, похоже, только из за сравнимости по времени самой операции и ее вызова. На делении разницы почти нет.
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скорость рисования и остальная скорость ZotaC Gamedev - cоздание игр: Unity, OpenGL, DirectX 121 13.11.2010 22:51
Скорость работы различных СУБД _SERGEYX_ БД в Delphi 3 10.10.2010 11:38
Скорость работы программы Farrel Общие вопросы C/C++ 0 10.09.2010 23:25
Delphi: наивысшая скорость работы с матрицей ex.cluz Общие вопросы Delphi 5 31.05.2010 16:52
зависит ли скорость работы макроса от порядка условий? kievlyanin Microsoft Office Excel 9 29.05.2009 12:30