タグ

cに関するsotarokのブックマーク (39)

  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

    前回の記事『プログラム初心者にC言語のポインタを不意ながら教える羽目になったなら、こう教えると良いよ』でポインタの教え方を書きました。ソレに対して「そもそもどうしてポインタっていう仕組みがあるの?」という質問をもらったので、つらつらと書こうと思います。稿は「ポインタがある理由の教え方」ではなく「ポインタがある理由」です。分かっている人には相当に退屈な文章ですのでそういう人は読まずにお帰りください。 で、えーと、結論だけ先に言うと省メモリ化のため、次に速度アップのため、そして生産性アップのためです。 1. メモリは有限である。 マシンに搭載されているメモリには限りがあります。メモリ空間は広大ですが、無限ではないのです。 好き放題にどんどんメモリを使ってデータを格納するわけにはいかないというわけです。しかしプログラムは計算のためにメモリ空間を占有します。仮に↓こんな感じに、わずかな有限メモ

    sotarok
    sotarok 2012/08/31
  • Hubbub | HTML Parsing Library

    What is Hubbub? Hubbub is an HTML5 compliant parsing library, written in C. It was developed as part of the NetSurf project and is available for use by other software under the MIT licence. The HTML5 specification defines a parsing algorithm, based on the behaviour of mainstream browsers, which provides instructions for how to parse all markup, both valid and invalid. As a result, Hubbub parses we

    sotarok
    sotarok 2011/02/01
    html parser
  • プログラミング/C,C++/2GBより大きなファイルの扱い - PukiWiki

    この文書について † この文書では,gcc を利用している場合に C,C++ において 2GB よりも大きなサイズのファイルにアクセスするための方法を説明しています. この文書を記述するために,以下の文書を参照しました. http://www.ece.utexas.edu/~luo/linux_lfs.html http://www.turbolinux.co.jp/world/library/features/SoftwareDesign/200401/AMD64/64bit-ch3a-2.html ↑ プログラミング/C,C++/2GBより大きなファイルの扱い † とりあえず訳しておきます. IA-32 アーキテクチャでは,メモリアドレス幅が 32 ビットであるため,Linux/x86 で扱えるファイルのサイズは 2GB に制限されていることが多いです.しかしながら,Large Fil

    sotarok
    sotarok 2010/10/22
    -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
  • モダンなC, C++の開発環境の構築方法 - 考える人、コードを書く人

    まだC, C++がないようなので書いてみた。主にLinux(DebianとかUbuntu)での環境構築について。 コンパイラ まずはapt-getでコンパイラをインストールする。UbuntuやDebianなら以下のコマンドでgccやg++および標準ライブラリ等がインストールされる。 $ sudo apt-get install build-essential デバッグツール デバッガおよびデバッグツールは少なくとも以下の三つは入れる。(あとltraceも欲しいかな?) GDB 言わずと知れたGNUのデバッガ Valgrind メモリリークや不正メモリアクセスの検出 strace システムコールのトレース $ sudo apt-get install gdb valgrind strace ビルドツール C, C++のビルドツールといえばまずmakeが浮かぶけど、最近ではSConsやCMak

    モダンなC, C++の開発環境の構築方法 - 考える人、コードを書く人
    sotarok
    sotarok 2010/07/31
  • DNA - フリーソフトウエア - distcc

    distcc は分散コンパイラであり C, C++, Objective C や Objective C++ のコードをネットワーク上のマシンを通じて構築できる。 distcc はローカルマシン上でコンパイルするのと同等な結果を得ることができ、 導入したり使ったりするのが簡単で、 しばしばローカルマシン上で同じことをするよりもずっと速い。 distcc はそれぞれ前処理したソースコードと引数をネットワークを通じて送る。 そのため、ファイルシステムやヘッダーファイル、 あるいはライブラリを共有する必要はなく、 同じプラットフォームである必要もない。 ただしコンパイラの名前は合わせる必要がある。 環境変数にサーバの名前を設定する。 $ DISTCC_HOSTS="host_to_use_for_compilation ..." $ export DISTCC_HOSTS 名前は速い順に並べる。

  • The Narwhal Compiler Suite

    Connect your teams with an integrated digital workplace Wherever your teams work, keep them connected with a digital workplace that unifies all your productivity tools in one central place Claromentis provides a reliable and feature-rich business intranet software for modern organizations. Offering collaborative, social, knowledge-sharing, and enterprise-level applications, Claromentis' intranet p

    sotarok
    sotarok 2010/05/30
  • memcachedプロトコルのストリームパーサ - Blog by Sadayuki Furuhashi

    memcachedクライアントはほとんどの言語で実装されており、key-valueベースの何かを作るときにはmemcacheプロトコルをサポートしておくと、クライアントを実装する手間が省けるのでイケてます。 しかしmemcachedのテキストプロトコルのような「行」が主体となっているプロトコルは、スレッドを使った実装では比較的簡単に処理できるのですが(fgets(3)を使うなど)、selectやepollなどを使ったイベント駆動型の実装では非常に面倒なことになります。(一度パースしてみて、どうも全部データが到着していないようなら一度状態を変数に保存して、次にデータが到着したら変数から状態を復元して…) イベント駆動型の実装では、データを次々に投げ込んでいくと内部の状態が遷移していき、ゴールの状態にたどり着くとパース完了、という状態遷移型のパーサが必要になります。そこで、Ragel Stat

    memcachedプロトコルのストリームパーサ - Blog by Sadayuki Furuhashi
  • 変数

    変数はメモリに確保される 変数と言うとデータを入れておく箱と言う説明がよく出てきます。まったくその通りなのですが、C言語を使っていく上ではもう一歩踏み込んでコンピューター上でどうなっているのかを知っている必要があります。当たり前のことですが、変数はメモリ上に確保されます。コンピューター上のメモリはハード的には全部同じでもソフト的には領域を区切ってそれぞれに役割を割り振って動作していますのでその理解が重要です。 きちんと理解すればC言語で起こりがちなメモリ関連の障害やバグに適切に対応できるようになります。 C言語のメモリの使い方 C言語でメモリを理解する場合大雑把にコード(code)、データ(data)、ヒープ(heap)、スタック(stack)の4つに分けて考えることができます(実際にはさらにいくつかに分かれる場合があります)。C言語の入門書ではこの話は滅多に見かけませんが初心者と中級者

    sotarok
    sotarok 2010/03/17
    C言語のメモリモデル / ヒープ領域とスタック領域について
  • プリプロセッサ基礎文法最速マスター - デ-mk6

    最速だけに催促されたので書きますね! 1.基礎 印字命令を見てみましょう。 lesson1-1.cpp 123 abc AAAAAAAAAAAAAAAAA!と書いたファイルを実行すると、 123 abc AAAAAAAAAAAAAAAAA!このようになります。見てのとおり書いたまんま印字されるので、特に印字するための命令とかはないです。これだけだと「おいプログラミング言語ちゃうんかボケが!」と罵られること請け合いなので、印字以外の命令を見ましょう。 lesson1_2.cpp #define FOO 1 #define BAR A FOO BAR FOO FOO BAR結果は、 1 A 1 1 Aと印字されます(改行は適宜省略しています)。 「#define HOGE PIYO」と書くと、「以後に登場するHOGEをPIYOに置き換えますよ」という命令です。記号以外の文字が置き換え後として使

    プリプロセッサ基礎文法最速マスター - デ-mk6
  • GDBで歴史をさかのぼれるように!なりました! GDB 7.0 の新機能Reverse Debuggingを使ってみた - 日記を書く [・w・] はやみずさん

    Twitter上で、@alohakun が言及していた GDB の reverse debugging の機能を使ってみました。 GDB にトレースと逆実行機能入ったのか。 http://www.gnu.org/software/gdb/news/reversible.html http://twitter.com/alohakun/status/4481139191 まずは簡単な使い方を説明したあとに、インストール方法を説明します。 こんなときに便利 「変なこと」が起きている大体の場所がわかっているとき デバッグ中に、大体どこで変なことが起きているかはわかっているけど、細かい場所は特定できていないとき、reverse debuggingが効果を発揮します。 GDBでステップ実行をしていて、「しまった!行きすぎた!」という経験はよくあると思います。こういうとき、今まではプログラムの実行を最

    GDBで歴史をさかのぼれるように!なりました! GDB 7.0 の新機能Reverse Debuggingを使ってみた - 日記を書く [・w・] はやみずさん
    sotarok
    sotarok 2009/10/01
    ほむほむ
  • GLibで連結リスト(リスト構造)にデータを追加する方向とその時間について - 試験運用中なLinux備忘録・旧記事

    先頭からデータを逆順に追加すると処理が少ない? GTK+をはじめとして広く利用されているライブラリのGLibにはリスト構造(自己参照構造体)のデータ型が標準で用意されていて 単方向(手前の要素をたどれない): GSList 双方向(手前にも後ろにもたどれる): GList の2種類がある。いずれもデータを新しく追加する際には 先頭に追加する「_prepend()」系関数 末尾に追加する「_append()」系関数 など*1を使用するのだが http://web.archive.org/web/20070113170119/www.gnome.gr.jp/docs/glib-2.8.x-refs/glib/glib-Singly-Linked-Lists.html#g-slist-append を見ると、(リスト構造の性質により)後者の「_append()」系関数ではリストの終端を捜すために

    GLibで連結リスト(リスト構造)にデータを追加する方向とその時間について - 試験運用中なLinux備忘録・旧記事
    sotarok
    sotarok 2009/09/18
  • ISO Cの型違いポインタアクセス禁止規則 - sumiiのブログ

    http://www.atdot.net/~ko1/diary/200711.html#d15 手近に64ビット環境がない&ちゃんと見ていないので外しているかもしれませんが、 http://gcc.gnu.org/bugs.html#nonbugs_c ("Casting does not work as expected when optimization is turned on.") http://mail-index.netbsd.org/tech-kern/2003/08/11/0001.html あたりにある"dereferencing type-punned pointer will break strict-aliasing rules"問題だったりしないでしょうか。 ISO C規格の和訳(JIS規格)より引用: オブジェクトに格納された値に対するアクセスは,次のうちのいず

    ISO Cの型違いポインタアクセス禁止規則 - sumiiのブログ
    sotarok
    sotarok 2009/08/10
    型の違うポインタのキャストだめ
  • C 言語のテストフレームワーク - A More Beautiful day

    wassr の TL でテストの話があったので、C 言語で使えそうなテストフレームワークを探してみた。CUnit があるのは知っていたけれど。 それぞれの特徴や使い方はこれから調べる。 Effective CUnit は最近も更新されているし、機能改善などはこれからも期待できるのかな。CSpec も最近のブームからできたものだろうから、これから続いていくような気がする。 [[Cutter|http://cutter.sourceforge.net/index.html.ja]][[Cunit|http://sourceforge.net/projects/cunit/]][[Effective CUnit|http://kaeru-lab.sakura.ne.jp/cunit/]][[CSpec|http://github.com/arnaudbrejeon/cspec/tree/m

    sotarok
    sotarok 2009/06/18
    Effective CUnit
  • 100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog

    例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI

    100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog
  • 印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記

    アーキテクチャに関する質問として、「○○の仕組みってどうなってるの」というようなことを聞かれても、説明下手なせいか、なかなか口で説明できないことがある。そこで「UTSL (ソース読めばいいよ)」と言いたいんだけど、かといって実際に、これを読むといいんじゃないかな、という話にもしづらい。入門的なコードはあまりにも単純すぎて退屈だし、かといって何か適当な著名なプロダクトのソースも、おおよそ手軽に読めるという感じではない。 さて、前エントリで epoll(7) やら select(2) やらの内部の説明をしたわけだけど、呼び出し側がどうなっているのかという部分のイメージがつかめなければ、片手落ち、というか意味不明だろうというように思ったので、恥をしのんで、簡単なシングルスレッドのイベントループベースの (twisted っぽい) TCP ECHO サーバを書いてみた。 電車の中でも読めるというコ

    印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記
    sotarok
    sotarok 2009/05/30
  • プラグインで独自ストレージを作ろう - mixi engineer blog

    OpenSocialとかC++0xとか世の中の流れが早すぎて、いろいろと勉強しなきゃなと焦りつつも、ついついピクミン2にはまってしまうmikioです。今回はTokyo Tyrant(TT)を使ってユーザ独自のストレージシステムを簡単に構築する方法について説明します。 プラグインとは オブジェクト指向プログラミングに慣れた人にとっては、インターフェイスと実装を分離することによってプログラムの拡張性や保守性を向上させる技法(データ抽象)は常識ですよね。その考えをさらに進めると、インターフェイスのみをプログラムに記述しておいて、具体的な実装は実行時に割り当てるという、いわゆるプラグイン(plug-in)という技法に至ります。プラグインでカスタマイズできる能力をプラガブル(pluggable)などと言ったりもします。 例えばTokyo Cabinet(TC)では、レコードの挿入、削除、参照といった

    プラグインで独自ストレージを作ろう - mixi engineer blog
  • C 言語で echo サーバを作ってみよう (1)

    echo サーバ 次に、C 言語で echo サーバを作ってみましょう。 perl に慣れてしまった軟弱な体には、結構こたえまっせ。 echo サーバを作ってみよう (2) で作成した、最も基的な echo サーバを C 言語に書き直したものが、 以下のソースです。 echo-server-1.c 1: /* 2: * $Id: echo-server-1.c,v 1.6 2005/02/19 16:01:53 68user Exp $ 3: * 4: * echo サーバサンプル 5: * 6: * written by 68user http://X68000.q-e-d.net/~68user/ 7: */ 8: 9: #include <stdio.h> 10: #include <stdlib.h> 11: #include <string.h> 12: #include <n

    sotarok
    sotarok 2009/05/12
  • GCCのプリプロセッサの動きをみて遊ぶ - big-eyed-hamster’s diary

    ruby-libvirtのソースコードを読んでいたら、何やら怪しげなマクロが。 67 #define generic_get(kind, v) \ 68 do { \ 69 vir##kind##Ptr ptr; \ 70 Data_Get_Struct(v, vir##kind, ptr); \ 71 if (!ptr) \ 72 rb_raise(rb_eArgError, #kind " has been freed"); \ 73 return ptr; \ 74 } while (0); 75 シャープだと!しかも2つだと!見たことないぞ! というわけで引数マクロについてちょっと実験してみました。 基的な引数付きマクロ まずは基的な引数マクロ。 1 #include <stdio.h> 2 3 #define test_puts(hoge) \ 4 do { \ 5 hoge

    GCCのプリプロセッサの動きをみて遊ぶ - big-eyed-hamster’s diary
    sotarok
    sotarok 2009/04/04
    プリプロセッサ
  • http://docs.sun.com/app/docs/doc/805-7886/6j7drf0sr?l=ja&a=view

    sotarok
    sotarok 2009/03/23
    コンパイルとリンクの流れ
  • C言語: 実行時間測定の方法

    C言語において実行時間を測定する為の方法はいくつかある。gettimeofday, clock, getrusage, timesを利用する方法である。ここではこれらの方法について検証してみる。これは2005/12/30時点での情報であり、古い亊が考えられるので注意して頂きたい。さらに、内容のほとんどはmanを移しただけなので、正確な情報を得るためにそれぞれの関数のmanを見ることを強く推奨する。 System: Linux 2.6.12 glibc: glibc 2.3.5-1ubuntu12 gettimeofdayを使用する方法 通常はこの関数を使用するのをお勧めする。 gettimeofdayはSVr4, BSD 4.3準拠である。返り値の型はsys/time.hに定義されるstruct timevalで有る。

    sotarok
    sotarok 2009/03/22