タグ

ブックマーク / yupo5656.hatenadiary.org (3)

  • 分岐しないソート (のジェネレータ) - memologue

    分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回の交換でできるよ。さらに、交換を Pentium Pro で追加された命令であるCMOVcc(Conditional Move)で行うことにすれば、「cmp b, a して、 b < a のときだけ b と a をswap」という処理を分岐命令なしで行うことができるから速いよ。 となります。この、「4要素専用・VC++専用の分岐しないソート」を、いつものように(?) GCC向けに書き直してみました。こちら。 分岐しないN要素の odd-even mergesort、GCC/Linux/x86_64版 (x86_64のお勉強がて

    分岐しないソート (のジェネレータ) - memologue
    ogijun
    ogijun 2009/04/24
  • g++ exception handling - memologue

    Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス

    g++ exception handling - memologue
    ogijun
    ogijun 2008/10/22
  • C++ で SICP - memologue

    計算機プログラムの構造と解釈 の問題を、Schemeで一問一問解いてゆくのが流行りな2006年でした(師走気分)。このSICPをHaskellやCleanで解いている方はいますが、意外にもC++で解いている人が見当たらないので(注: あたりまえ)、C++のテンプレートはさっぱりよくわからんなぁと思いつつ適当にやってみます。ネタです。 [ネタ1] exercise 1.45, 1.46 まずは、問題1.45-1.46を。これらは1章の最終問題で、1章で学んだ手続き抽象のテクニック全てを使う感じがして楽しいです。xのn乗根を反復改良法で求める関数 nth-root を作るという設問です。 まずはSchemeで解く 私の拙いスキーム力を用いて書いてみるとこんな感じ*1? (define (compose f g) (lambda (x) (f (g x)))) (define (repeated

    C++ で SICP - memologue
    ogijun
    ogijun 2006/11/25
    すごすぎ
  • 1