タグ

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

  • 関連タグはありません

タグの絞り込みを解除

programmingとgccとlibraryに関するjjzakのブックマーク (3)

  • 関数呼び出し規約(on IA-32)について

    Written by Yashiro Takeshi <yashiromann@nifty.com> 2004/1/14 IA-32(x86)上のgccでの関数呼び出し規約について、まとまっている文書がgoogleで検索してもなかなか見つからず苦労したので、他のものと一緒についでにまとめておくことにします。私もよく分かっていないので、何か間違いがありましたら(掲示板でもメールでも)教えてください。 確認の際、抜けがないようにここにも書いておくと、関数呼び出し規約とは、 関数呼び出しの前後で保存されなければならないレジスタ 引数渡しの方法 (ex. レジスタ渡し・スタック渡し・共有メモリ渡し) 引数渡しの順序 関数呼び出し前後でのスタックポインタの保存方法 返り値の戻し方 の全てをあわせたものであって、どれか一つでも曖昧にしてミスしてしまうと思わぬところでエラーが発生してしまいます。(私の

  • 呼出規約 - Calling Convention(コーリングコンベンション)

    キーワード C言語, コンパイラ, 引数, 返却値, スタック, スクラッチレジスタ これだけは覚えよう C言語プログラムとアセンブリ言語プログラムをつなげるには、呼出規約を知らないといけない。 呼出規約は、コンパイラ毎に変化する。 関数呼出 C言語やPascalなどの高級言語の多くは、関数を作ることができます。ある程度の処理をひとつの関数(手続き)として分離することで、問題を簡単にしたり、使い回ししやすくしたり、コードの見栄えを良くしたりできます。呼び出す側は処理に必要な情報を与え、呼び出された側は渡された情報のみ(※)を用いて処理を行って答えを返します。 プログラムが計算を行うためには、レジスタを使用する必要があります。しかし、呼出元も呼出先もレジスタを使用するので、そのままではレジスタを取り合ってケンカがおきます。これを調停するのが呼出規約です。 呼出規約の中には、次のような決め事が

  • J

    Cで汎用ライブラリをつくってると、void*の嵐になって型安全が無くなると思う。 ちょっとした手間で、それをなんとかする話。 struct varray { int nelem; void *values; }; #define VSET( t, a, i, e ) (((t*)a##t.values)[i] = e) #define VDECL( t, name ) struct varray name##tこんなふうにして。 int main() { VDECL( int, a ); VSET( int, a, 0, 4 ); }こんなふうにする。 変数宣言がちょっとキモくなるのと、配列アクセスが、キモくなる。のと、配列アクセスするときに型の名前がいる。 のだけど、 int main() { VDECL( int, a ); VSET( float, a, 0, 4.0 ); }こうい

    J
    jjzak
    jjzak 2007/01/19
    Cで型安全可変長配列ライブラリをつくる
  • 1