Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Счётчик цикла или временная переменная?

3.3K
24 августа 2006 года
ShadyMan
191 / / 15.07.2006
Какая конструкция эффективнее в смысле времени исполнения, такая:
Код:
struct _string
{
 char *b;
 char *e;
} lines[10];

int main(void)
{
 int i;
 i=0;
 while (i<10)
 {
  lines.e=0;
  //Что соответствует ассемблерному коду (при отладке в C++ Builder'e)
  //xor ecx,ecx
  //mov [edx*8+lines+0x04],ecx
  i++;
 }
 return 0;
}


или такая:
Код:
struct _string
{
 char *b;
 char *e;
} lines[10];

int main(void)
{
 struct _string *ps1, *ps2;
 ps1=lines;
 ps2=&lines[9];
 while (ps1<=ps2)
 {
  ps1->e=0;
  //Что соответствует ассемблерному коду
  //xor ecx,ecx
  //mov [edx+0x04],ecx
  ps1++;
 }
 return 0;
}


Я не очень хорошо разбираюсь в ассемблере, но мне кажется, что операция "mov [edx*8+lines+0x04],ecx" представляет на самом деле несколько операций, причём умножение должно занимать относительно много процессорного времени, поэтому второй вариант предпочтительнее.

Кто как считает?
1.8K
24 августа 2006 года
k3Eahn
365 / / 19.12.2005
В обоих случаях инcтрукции mov - типа mov m32,r32 и требуют 1 микрооперацию.
3
24 августа 2006 года
Green
4.8K / / 20.01.2000
Равнозначно, особенно после оптимизации.
Но первый вариант читабельнее, поэтому я голосую за него.
309
20 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
Так как в цикле производится обнуление информации, лучше третий вариант :D
 
Код:
for (int i = sizeof (lines) / sizeof (string); i > 0; i--)[INDENT]lines .e = NULL
[/INDENT]

Во-первых: существенно нагляднее :)
Во-вторых, гораздо меньше переменных, которые загромождают область видимости функции. А "i" нигде, кроме как внутри цикла не нужна, зачем ей существовать вне его:confused: .
В-третьих: сравнение числа с нулём выполняется быстрее, чем с другим числом (поправьте меня, если я не прав;) )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог