LINUX.ORG.RU

develop


0

0

Несколько разношерстных вопросов:

1. Первый по GAS. mov[b|w|l] и иже с ними - отлично. Но как GAS определяет размер операнда в командах FPU? Например: fild -4(%esp) # 16, 32 или 64 бита ???

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

3. Проблема с firefox. В mozill'е делел так: mozilla & mozilla -remote 'OpenURL(google.com)' Все OK.

С firefox: ./firefox & ./firefox -remote 'OpenURL(google.com)' Выдает: Error: No running window found

P. S. firefox не прописан в PATH, просто из архива распаковал бинарник с остальным стафом в левый каталог.

anonymous

2. Тем что вместо call делается jmp и параметры функции передаются на месте параметров вызывающей функции - т.е. грубо говоря рекурсия заменяется циклом.

3. firefox -a firefox -remote ...

Begemoth ★★★★★
()

что такое 'оптимизация хвостовой рекурсии'? И что такое 'эфективность хвостовой рекурсии'?

Эфективность рекурсии достигается в использовании хвостовой рекурсии когда это возможно

хвостовая рекурсия это уже оптимизированная рекурсия

lg ★★
()

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

anonymous
()
Ответ на: комментарий от anonymous

хвостовая рекурсия достигается тем что у тебя рекурсия возникает в _самом последнем_ операторе

lg ★★
()
Ответ на: комментарий от anonymous

а эфективней она потомучто не требует перезапуска

lg ★★
()
Ответ на: комментарий от lg

Я так понимаю, хвостовая рекурсия достигается тем, что функция строится так, что не требуется возврат...

// Аноним, задавший вопрос

anonymous
()
Ответ на: комментарий от anonymous

И еще, кто знает - разъясните первый вопрос, пожалуйста...

// Аноним, задавший вопрос

anonymous
()
Ответ на: комментарий от anonymous

1. Точнее будет сказать, что функция вызывается таким образом, что не
будет два и более последовательных возврата.

2. А еще тем, что выполняется в постоянном объеме памяти - без
оптимизации стек растет при каждом вызове.

3. GCC с -O3 использует хвостовую рекурсию, посмотри что он сгенерирует
для кода

int fact(int x)
{
  int iter(int x, int i)
  {
    return x == 0 ? i : iter(x - 1, x * i);
  }

  return iter(x, 1);
}

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

Это не так. gcc прекрасно заменяет хвостовую рекурсию циклом (с -O2).

baklan
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.