タグ

C言語に関するvivit_jcのブックマーク (4)

  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    vivit_jc
    vivit_jc 2013/10/02
    動悸、息切れ、頭痛、吐き気などの諸症状
  • Duff's device - Wikipedia

    Duff's Device(ダフスデバイス)とは、C言語での可変長の連続的コピーをループ展開により最適化実装するときに直面する端数の問題を解決するための手法である。 C言語のswitch-case文が持つフォールスルーを利用して、アセンブリ言語で行われる技巧をC言語で実現している。1983年11月、ルーカスフィルムで働いていたトム・ダフが発見した。 背景問題[編集] ループ展開は、ループのための分岐回数を減らす技法である。指定されるループ回数が不明な場合、ループ展開すると回数が合わない場合が出てくるので、ループの途中にジャンプすることで調整する。例えば、8回ぶんのループを展開した場合、指定されたループ回数が8で割り切れないなら、その回数を8で割った剰余のぶんだけ処理を実行する位置にジャンプさせる。 ダフはそのような最適化を検討していてCでの技法を発見した。 来のバージョン[編集] 連続コ

  • Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog

    はじめに Ruby Advent Calendar jp: 2011 : ATNDの17日目の記事です。昨日は@yoppiblogさんのSeleniumの自動テストをCI環境(Jenkins)で快適に実施するでした。 Rubyを使ってて 遅い…ここだけ超遅い… とか あのライブラリが使いたい!でもRuby用のライブラリじゃないし… みたいなこと、ありますよね? そんなとき、Rubyの拡張ライブラリで解決できるかもしれません。 Rubyの拡張ライブラリは、普通のライブラリと異なりC(とかC++とかその他の言語とか)で作成します。そのため、Rubyで直接書くよりも高速に処理できたり、Cのインタフェースが用意されているライブラリをRubyから呼びだしたりすることができます。すばらしい! そんなわけで、拡張ライブラリの作り方をざっくり説明したいと思います。 用意するもの Cコンパイラとかmakeと

    Rubyの拡張ライブラリを作ってみよう! - ser1zw's blog
  • メッセージキュー

    メッセージキューはパイプとより扱いが簡単でちょっと嬉しい. メッセージキューに関する関数 サンプル メッセージキューに関する関数メッセージキューに関する関数として,以下がある. int msgget(key_t key, int msgflg); 指定したkeyのメッセージキュー識別子を取得.msgflgにはパーミッションやオプションなどを指定する.これにIPC_CREATを指定すると,指定したkeyのメッセージキューがない場合は作成してくれる. int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg); メッセージの送信. ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg); メッセージの受

  • 1