2010-12-02 3 views
2

Большинство функций в <functional> используют функции. Если я напишу такую ​​структуру:Задача оптимизации компилятора

struct Test 
{ 
    bool operator() 
    { 
     //Something 
    } 
    //No member variables 
}; 

Есть ли перфекционный хит? Будет ли создан объект Test? Или компилятор может оптимизировать объект?

+0

Почему не простая функция вместо функтора, так как в вашем функторе нет переменной-члена? – Chubsdad 2010-12-02 06:06:35

+0

@ Chubdad: Из-за «Trick», упомянутого в ответе на этот вопрос. http://stackoverflow.com/questions/442026/function-overloading-by-return-type – nakiya 2010-12-02 06:08:49

ответ

3

GCC по крайней мере может оптимизировать создание объекта и встроить ваш функтор, чтобы вы могли ожидать производительности, как в ручном стиле. Конечно, вы должны скомпилировать с -O2.

3

Да, компилятор может оптимизировать «создание объекта» (что в этом случае тривиально), если он этого захочет. Однако, если вам действительно интересно, вы должны скомпилировать свою программу и проверить код сборки.

0

Нет никакого «использования» структуры, так как код в настоящее время стоит, это все еще просто определение (и не занимает пробела).

Если вы создадите объект типа Test, он займет ненулевое пространство. Если компилятор может вывести, что ничто не берет его адрес (или что-то подобное), он может свободно оптимизировать использование пространства.

3

Даже если у компилятора был плохой день, и почему-то не удалось выяснить, как оптимизировать его (это очень просто, как оптимизация) - без каких-либо элементов данных и без конструктора «удар производительности» для «создания объекта «было бы не более одной инструкции (плюс может быть еще пару для копирования объекта, если компилятор также не выясняет, как встроить вызов функции, который использует функтор), чтобы увеличить указатель стека (поскольку каждый объект должен имеют уникальный адрес). «Создание объектов» - . Требуется время , выделяющее память, через new (потому что ОС должна быть подана в память для памяти, и она должна искать непрерывный блок, который не используется кем-то другим). Помещение вещей в стеке тривиально.

Смежные вопросы