LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Да, кстати, по поводу самой статьи. Процитирую

mfi_tbolt_adp_reset(struct mfi_softc *sc)
{
  ....
  for (i=0; i < 10; i++) {
    for (i = 0; i < 10000; i++);
  }
  ....
}

Этот небольшой код скорее всего используется для создания задержки, только суммарно тут выполняется 10000 итераций, а не 10*10000, тогда зачем использовать два цикла?

Это НЕЛЬЗЯ использовать для создания задержки, компилятор такой код при оптимизации выбрасывает т.к. он ничего полезного не делает.

https://svnweb.freebsd.org/base/head/sys/dev/mfi/mfi_tbolt.c?view=markup&... вот собственно ссылка на ту самую функцию. Если уж делать такое, надо в такой цикл всовывать «холостую» ассемблерную вставку. Есть еще подозрения что они это компилируют с какими-то особыми опциями "-не-выбрасывать-бесполезные-циклы" но я во-первых сомневаюсь что такая опция есть, во-вторых это очень и очень плохо, полагаться на конкретное поведение конкретного компилятора

Исходная версия SZT, :

Да, кстати, по поводу самой статьи. Процитирую

mfi_tbolt_adp_reset(struct mfi_softc *sc)
{
  ....
  for (i=0; i < 10; i++) {
    for (i = 0; i < 10000; i++);
  }
  ....
}

Этот небольшой код скорее всего используется для создания задержки, только суммарно тут выполняется 10000 итераций, а не 10*10000, тогда зачем использовать два цикла?

Это НЕЛЬЗЯ использовать для создания задержки, компилятор такой код при оптимизации выбрасывает т.к. он ничего полезного не делает.