Лучше ли использовать целые числа в качестве переменных счетчика цикла? - PullRequest
11 голосов
/ 11 февраля 2010

Я помню, что читал где-то, что лучше использовать целые числа в качестве переменных счетчика цикла, а не char или short. Если да, то почему? Это дает какие-либо преимущества оптимизации?

Ответы [ 11 ]

0 голосов
/ 11 февраля 2010

Это действительно зависит от того, что делает ваш цикл. Возьмем этот цикл, например:

typedef struct _SomeData
{
  /* some data here */
} SomeData;

void SomeFunction (SomeData *array_of_data, int number_of_elements)
{
  int i;

  for (i = 0 ; i < number_of_elements ; ++i)
  {
     DoSomethingWithData (&array_of_data [i]);
  }
}

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

void SomeFunction (SomeData *array_of_data, int number_of_elements)
{
  SomeData *current = array_of_data, *end = &array_of_data [number_of_elements];

  while (current < end)
  {
    DoSomethingWithData (current++);
  }
}

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

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

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

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