タグ

関連タグで絞り込む (3)

タグの絞り込みを解除

C++とtrに関するt_ashulaのブックマーク (2)

  • 末尾再帰最適化判定 - やねうらおブログ(移転しました)

    C++でコンパイラが末尾最適化を行なっているのかを判定するコードを考えてみた。 私は最初、id:higepon:20070804:1186241590のコードを思いついたのだけど、このプログラムは誤りだった。関数のなかでアドレス演算子&でアドレスをとると、そのアドレスを外部から参照されて変更とかされたときに、N回目の再帰とM回目(N!=M)の再帰とで異なるアドレス指していないと元のプログラムと等価にならない。 だから途中でアドレスをとると末尾再帰の最適化は行なわれないのだろう。 修正案は、こうだ。 #include <stdio.h> #include <stdlib.h> int* tail_rec_opt_internal(int level) { if (level == 0) return &level; return tail_rec_opt_internal(--level);

    末尾再帰最適化判定 - やねうらおブログ(移転しました)
    t_ashula
    t_ashula 2007/08/05
  • 末尾再帰最適化をC/C++上で検知してみたい - higepon blog

    某所で「処理系が末尾再帰最適化をしているかを、処理系で動くコードから判定できるか」的な話をふったところ C/C++ なら出来そうだよねと id:yaneurao さんからツッコミが。 やってみよう。 最適化されているなら is_tail_rec_opt_internal の引数である level は再帰しないのだから常に同じアドレスにいるはずだという予想の元に判定をしている。 int is_tail_rec_opt_internal(int level, int* p) { if (0 == level) { return &level == p; } else { return is_tail_rec_opt_internal(--level, &level); } } int is_tail_rec_opt() { return is_tail_rec_opt_internal(102

    末尾再帰最適化をC/C++上で検知してみたい - higepon blog
    t_ashula
    t_ashula 2007/08/05
    vc8.0sp1 32bit は true
  • 1