Разница во времени исполнения, есть ли? - PullRequest
1 голос
/ 25 ноября 2010

Рассмотрим этот фрагмент кода:


class A {
  void methodX() {
  // snip (1 liner function)
  }
}

class B {
  void methodX() {
   // same -code
  }
}
 

Теперь я могу пойти другим путем, у меня есть класс (AppManager), большинство членов которого являются статическими (из старого кода, не предлагайте мнеsingleton;))


class AppManager {
  public:
  static void methodX(){
   // same-code
  }
}

Какой из них предпочтительнее?Поскольку оба они встроены, разницы во времени выполнения не должно быть, верно?
Какая форма более чистая?

Ответы [ 3 ]

6 голосов
/ 25 ноября 2010

Теперь, во-первых, это настолько незначительная проблема, что вам никогда не придется об этом беспокоиться, если функции не вызываются тысячи раз за кадр (и вы делаете что-то, где «кадры» имеют значение).

Во-вторых, если они встроены, код (надеюсь) будет оптимизирован настолько, что не будет никаких признаков того, что функция не является статичной.Это было бы идентично.

Даже если бы они не были встроены, разница была бы незначительной.ABI поместил бы указатель «this» в регистр (или стек), что он не сделал бы в статической функции, но, опять же, чистый результат был бы почти не поддающимся измерению.написать свой код в максимально чистом виде.На данном этапе производительность не имеет значения.

0 голосов
/ 25 ноября 2010

Я думаю, что это самая распространенная проблема оптимизации.На первом уровне, когда вы пишете код, вы пробуете каждый трюк, который помог бы компилятору, поэтому, если компилятор не может хорошо оптимизировать код, у вас уже есть.Это не верно.То, что вы ищете на первом этапе оптимизации во время написания кода, это просто чистый и понятный код, дизайн и структура.Это сделает намного лучший код, который «оптимизируется» вручную.

Правило:
Если у вас нет ресурсов для тестирования кода, перепишите его и потратьте много времени на оптимизацию, чем ненужен оптимизированный код.В большинстве случаев трудно добиться какого-либо повышения скорости при любой оптимизации, если вы хорошо структурировали свой код.

0 голосов
/ 25 ноября 2010

На мой взгляд Inline способ будет быстрее. потому что встроенные функции заменяются в коде во время компиляции и поэтому нет необходимости сохранять регистры, выполнять вызов функции и затем возвращаться снова. но когда вы вызываете статическую функцию, это просто вызов функции, и он требует гораздо больше ресурсов, чем встроенный.

...