タグ

ブックマーク / ray.sakura.ne.jp (6)

  • 最適化の為のアセンブラ入門

    現在、アセンブラを使わなければならないという状況はあまりありませんが、最適化をする場合はアセンブラを知っている方がなにかと有利です。特に、コンパイラの吐いたコードを吟味することはとても重要です。よってここでは、アセンブラコードを読む能力と、簡単なアセンブラコードを書く能力を身に付けることを目標とします。 この記事は Windows 上で VC++ を使う場合を想定して書いていますが、BCC でも殆ど同じですし、gcc でも少し書き方を変えれば使えます。Intel のプロセッサ上で動く Linux 等でも基的な部分は同じですし、命令セットの異なるプロセッサでも、基的な部分は役に立つと思います。ターゲットは Intel Pentium 系プロセッサです。 第0回 アセンブラってどういうもの? 第1回 代入と基的な演算 第2回 定数とメモリの扱い 第3回 レジスタについて 第4回 分岐命

  • misagosan

    Twitter: @misagosan

    tyru
    tyru 2009/06/11
    templateとか
  • template

    演習で使った C++ のテンプレートに関する資料を中途半端ですが公開しときます。暇があってやる気が出たら追加や書き直しをするかも。 テンプレート一般 template の適当な説明 コンパイル時の計算 コンパイル時のコード生成 traits とは policy とは typename は何故必要か

    tyru
    tyru 2009/06/09
    templateについて
  • template の適当な説明

    テンプレートの定義と実体化 テンプレートを使ふと、パラメータ化されたクラス・関数を定義することが出来る。 template <typename T> class MyVector { public: ... private: T* data; }; template <typename T> void swap(T& a, T& b) { T tmp = a; a = b; b = tmp; } 定義したテンプレートは、次の様に実体化して使ふ。引数から全てのテンプレート引数が分かる場合は、テンプレート引数を指定しなくても良い。 // この場合、どの型の MyVector かを明示的に指定しなければならない MyVector<int> mv; int x, y; ... // 引数が int なので swap<int> を実体化すべきだと分かる swap(x, y); // 勿論、明示的に実

    tyru
    tyru 2009/06/02
    テンプレート引数には「型」「値」「テンプレート」の三つを取ることができる
  • 配列のシャッフル

    イントロダクション よく、ランダムな数字の並びで、それぞれの数字がちょうど1回ずつしか出てこない、という数列が欲しいことがあります。例えば、カードのシャッフル等がこれにあたります。こういう時は配列に数字を入れ、その配列の要素をシャッフルして目的の数列を得るのが定石です。そのシャッフルをどうやるのがいいのか、というのが今回の話題です。 まず思いついた方法 昔私が最初に考えついたのは、ランダムに2つの要素を選んで swap する、という操作を複数回繰り返すという方法でした。コードっぽく書くと、次のような感じになります。 M = count_of_iteration; N = size_of_array; rand(x) = random_value_less_than_x; for(i = 0; i < M; i++){ a = rand(N); b = rand(N); swap(array

  • C++の4つのキャストを使いこなす

    イントロダクション C++ には全部で4種類のキャストがあります。これらの使い方をしっかり確認しておこうというのが今回の主旨です。いきなり題に入ってもいいのですが、まずは C 言語のキャストをおさらいしてみましょう。 (type-name) cast-expression C のキャストにはこの1つの形式しかありません。ややこしいですね。1つしかないのに何がややこしいかって?見た目は1つの形式しかないのに実際の動作は何通りもあるのがややこしいんです。ざっと考えただけでも次の3つの使い方が思い浮かびました。 float average(const int* array, int size); int n = (int) average(array, size); void * get_data(int nID); char * p = (char *) get_data(2); int g

    tyru
    tyru 2009/06/01
    ダウンキャストに失敗したらnullが返るのかー
  • 1