Вопрос производительности по вложенным if - PullRequest
2 голосов
/ 28 января 2011

есть ли какой-нибудь эффект производительности при работе "Lines of code - (C)" внутри вложенного ifs?

if (condition_1)
{
   /* Lines of code */ - (A)

   if (condition_2)
   {
      /* Lines of code */ - (B)

      if (condition_n)
      {
          /* Lines of code */ - (C)
      }
   }
}

Означает ли это, что вы можете вкладывать любое количество операторов if, не влияя на время выполнения кода, заключенного в конце последнего оператора if?

Ответы [ 3 ]

4 голосов
/ 28 января 2011

Помните, что C и C ++ переводятся в их ассемблерные эквиваленты.В большинстве случаев это может происходить с помощью некоторой формы сравнения (например, cmp) и некоторой формы инструкции jmp.

Таким образом, любой код, сгенерированный из (C), все равно будеттак же.Вложенность if не имеет отношения к выходу.Если результирующий код должен генерировать add eax, 1 независимо от того, сколько предшествующих ему значений if, это все равно будет одним и тем же.

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

1 голос
/ 28 января 2011

Код будет работать так же быстро, как если бы он был снаружи. Просто помните, что вычисление выражения (в выражении , если ) не является «свободным» и займет немного времени (больше, если условие более сложное), поэтому, если ваш код глубоко вложен, это займет больше времени для достижения этого.

1 голос
/ 28 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...