2016-03-30 3 views
-1

Желание выяснить, что делать с производительностью и компиляцией. Если кто-то использует несколько вызовов для v.back() вместо того, чтобы делать что-то вроде T = v.back(), будет ли компилятор оптимизировать код и почему? Теоретически, кто-то может реализовать метод back(), который является случайным. Есть ли что-то особенное в реализации спины, которая делает его быстрее?Насколько дороги вызовы метода back() вектора против хранения значения vs. вызов метода, который возвращает непредсказуемое значение?

+0

«Теоретически, кто-то может реализовать обратный метод, который является случайным». Случайные? Нет, он довольно четко определен и должен работать в O (1). –

+0

@MaxBozzi Да (я это знаю), я имею в виду, как компилятор «знал», что он всегда извлекает один и тот же элемент и оптимизирует для этого? Является ли компилятор интимным с языком? – zehelvion

+0

Вы спрашиваете, как компилятор может кэшировать результат запроса 'v.back()'? Хотя мы предполагаем, что вектор изменчив, 'back' не является ссылочно прозрачным, поэтому это непросто проверить. Я не знаю деталей какого-либо конкретного оптимизатора компилятора, но некоторые могут отслеживать код для проверки. –

ответ

3

Результат v.back() не будет кэшироваться, если компилятор не сможет увидеть его реализацию. Предполагая, что это вложен, компилятор может видеть, какие члены v вносят вклад в возвращаемое значение v.back(). Это, наверное, просто, что-то вроде begin+size-1. Если ни одно из этих изменений не изменится, компиляторы поймут, что они могут выполнять стандартное исключение общего подвыражения в этом выражении.

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

  • Нет связанных вопросов^_^