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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 13:25   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Вопросы оптимизации

Есть 2 функции. В одну ф-ю строка передаётся по значению, во втором - по ссылке. Как вы думаете, какая ф-я будет работать быстрее?
Код:
void add(string str) {
	string a = str;
	int b = 0;
	return;
}

void add2(string & str) {
	string a = str;
	int b = 0;
	return;
}
Возможно Я Быдлокодер ©.

Последний раз редактировалось t2skler; 02.04.2012 в 13:27.
t2skler вне форума Ответить с цитированием
Старый 02.04.2012, 13:55   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вторая.
правда у вас там все равно копирование строки зачем то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2012, 14:03   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вторая.
правда у вас там все равно копирование строки зачем то.
В теории - да, а вот на практике оказалось иначе. AQtime:
Цитата:
Routine Name Time Time with Children Shared Time Hit Count
add 3,81860054235513E-7 7,41419882206617E-6 5,15038864481244 1

Routine Name Time Time with Children Shared Time Hit Count
add2 5,35706559025937E-7 9,48887155767644E-6 5,64562978611038 1
У кого-нибудь есть предположение почему вторая ф-я исполнялась дольше?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 02.04.2012, 14:21   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для начала для чистоты теста надо убрать копирование в функции.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2012, 14:30   #5
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
для начала для чистоты теста надо убрать копирование в функции.
Не изменяя кода, снова проверил скорость. Ф-я add2 отработала быстрее. Странно.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 02.04.2012, 14:51   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <string>
#include <iostream>
#include <time.h>
using namespace std ;


void add1( string str ) {
   string a = str;
   int b = 0;
   return;
}


void add2( string& str ) {
   string a = str;
   int b = 0;
   return;
}


void add3( string& str ) {
// string a = str;
   int b = 0;
   return;
}


const unsigned int N_LOOPS = UINT_MAX-1 ;

int main() {

   unsigned int      i ;
   long     tBefore, tAfter ;
   string   str0 = "warning C4189: 'b' : local variable is initialized but not referenced" ;

   time( &tBefore ) ;
   for ( i = 0; i < N_LOOPS; i++ )
      add1( str0 ) ;
   time( &tAfter ) ;
   cout << " t1 = " << tAfter - tBefore << "s" << std::endl ;

   time( &tBefore ) ;
   for ( i = 0; i < N_LOOPS; i++ )
      add2( str0 ) ;
   time( &tAfter ) ;
   cout << " t2 = " << tAfter - tBefore << "s" << std::endl ;

   time( &tBefore ) ;
   for ( i = 0; i < N_LOOPS; i++ )
      add3( str0 ) ;
   time( &tAfter ) ;
   cout << " t3 = " << tAfter - tBefore << "s" << std::endl ;

   return 0 ;

}
120402.jpg
Vago вне форума Ответить с цитированием
Старый 02.04.2012, 18:45   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

t2skler, отключи все оптимизации
onewho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача оптимизации oGvDo Microsoft Office Excel 1 16.05.2011 16:57
Вопросы в основном по оптимизации быстродействия. Morkonwen Visual C++ 24 15.07.2010 02:35
Вопросы о оптимизации работы с СУБД Stilet БД в Delphi 8 21.07.2008 11:29
Вопросы по оптимизации скорости Иллидан Общие вопросы Delphi 9 11.07.2008 23:46
Помощь в оптимизации anger Общие вопросы Delphi 13 05.11.2007 13:15