Оптимизация специфичных функций
От: Anthony.K.  
Дата: 11.05.06 19:37
Оценка:
VC 2005.
Мне необходимо оптимизировать набор функций.

Все эти функции выглядят примерно так:

void Function(const CBigObject &theObject)
{
// вытаскивание кучи переменных из объекта
int i1 = theObject.Get_i1();
int i2 = theObject.Get_i2();
int i3 = theObject.Get_i3();
...

// активное использование переменных i1, i2, i3..

}


почемуто вдруг вытаскивание переменных из метода вида

inline int CBigObject::Get_i1() { return m_i1; }

работает быстрее, чем если бы я использовал метод вида

inline void CBigObject::Get_all_i(int &i1, int &i2, int &i3....) { i1 = m_i1; i2 = m_i2; ...}

не только для int, но и для структур без каких-либо перегруженных операторов



установил это я только из тестов.

как можно отыскать все такие места без гадания?
как посмотреть низкоуровневый код, получившийся из С++?

Заранее большое спасибо!
Re: Оптимизация специфичных функций
От: alexsoff Россия  
Дата: 11.05.06 20:05
Оценка:
Здравствуйте, Anthony.K., Вы писали:


AK>почемуто вдруг вытаскивание переменных из метода вида


А может быть попробывать их вытащить через массив?


AK>как посмотреть низкоуровневый код, получившийся из С++?

В settinгах проекта у С/С++>Output Files есть опция Assembler Output ставишь Assembly With Source Code при компиляции вместе с исходником выходит assemblерный файл.
Re: Оптимизация специфичных функций
От: Sazabis  
Дата: 12.05.06 07:39
Оценка:
Здравствуйте, Anthony.K., Вы писали:

AK>почемуто вдруг вытаскивание переменных из метода вида

AK>inline int CBigObject::Get_i1() { return m_i1; }
AK>работает быстрее, чем если бы я использовал метод вида
AK>inline void CBigObject::Get_all_i(int &i1, int &i2, int &i3....) { i1 = m_i1; i2 = m_i2; ...}
AK>не только для int, но и для структур без каких-либо перегруженных операторов
AK>установил это я только из тестов.

Потому что первый вариант скорее всего развертывался в inline подстановку значения. А второй вариант помимо прочего еще разименовывал ссылку. Данный вапрос скорее всего лечется выбором оптимизирующего компилятора, VC7.1+ или от intel.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.