タグ

cに関するcubicdaiyaのブックマーク (100)

  • NginxでのModuleの作り方 - よねのはてな

    Apacheモジュール作成は以前のエントリの通り手軽に出来ます。 Apacheモジュールの作成とgdbloggerでのデバッグ方法 - よねのはてな 今回は、Nginxでモジュール作成してみたいという人向けです。 Nginxにおける処理の流れと押さえておきたい構造体、モジュール作成方法をのせておきます。 Nginx http://nginx.net/ そもそもNginxってなんだ?という人は軽量超高速なHTTPサーバという理解でOKです。 実際にはReverse Proxy、Mail Proxyとしても使用可能で、ライセンスはNSD系。 Nginxについては以下を参照下さい。 パフォーマンス比較 http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/ Ngin

    NginxでのModuleの作り方 - よねのはてな
  • エスケープシーケンス - C言語 - 碧色工房

    サイトトップ 過去のコンテンツ C言語 エスケープシーケンス コンソール制御について、より詳しく、実際の出力例などを上げながら、 まとめたページを作りましたので以下も参照ください。 エスケープシーケンス ANSIエスケープコード コンソールグラフィック CUI のコマンドラインで動くプログラムを書く上でカーソルの位置などをコントロールできたらと思うことがあります。 こいつを実現するには、「エスケープシーケンス」というものを使います。 しかし、このエスケープシーケンスはハードウェアやOSに依存した部分が多いので注意が必要です。 とりあえず、 Windows 2000/XP (おそらく NT も)のコマンドプロンプトでは機能しない ※ことを確認しました。(ただし、 Cygwin 上では使用可能でした) MS-DOS プロンプトでは一部動くことを確認しました(一部が動いたのではなく、一部確認した

    エスケープシーケンス - C言語 - 碧色工房
  • gcov の使い方 - まめめも

    concov のドキュメントを書こうと思ったけれど、何から書くか困ったので、とりあえずその前に gcov の使い方とはまりどころを書いてみます。 gcov とは C 言語で書かれたプログラムのカバレッジを測定するツールです。gcc に付属しています。 基的な使い方 こういうコードがあるとする。 /* test.c */ #include <stdio.h> int foo(int x, int y) { return x + y; } int bar(int x, int y) { return x - y; } int main(void) { printf("%d\n", foo(2, 3)); printf("%d\n", foo(3, 4)); return 0; } コンパイルする。-coverage をつけると gcov 用のオブジェクトファイルが生成される *1 。 $ g

    gcov の使い方 - まめめも
  • C言語でハッシュテーブルを実装してしまった - へぼいいいわけ

    2ちゃんねるのdatを高速で処理するプログラムを書いていたら、いつのまにかC言語でハッシュテーブルを実装していました。これぞ車輪の再発明って感じです。 名前は「unhash」としておきます。 とりあえず、ダウンロードはこちらです。 http://www.heiwaboke.net/lang-c/src/unhash-0.01.zip 2012/09/16追記 ソースコードを紛失してしまったので、こそこそ改造してたバージョンの方にリンク貼っておきます。 名前が変わってちょっとだけ省メモリ化していますが、大の仕組みと使い方は同じです。 参考程度にどうぞ。 https://github.com/tanaton/unmap ベンチマーク 一番下がunhashです。 ベンチマークの方法はC/C++ で使える HashtableCommentsAdd Starを参考にしました。 tanaton@he

    cubicdaiya
    cubicdaiya 2009/09/07
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

  • ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改

    ディレクトリの中にある大量のファイルを高速に読み込む方法が知りたかったので、実験してみた。想定しているシチュエーションは、一つ一つのファイルは数KB程度だが数が多い、という場合である。適当な順番でアクセスすると、ランダムアクセスになってしまいとても時間がかかる。個々のファイルを読み込む順番はどうでも良く、すべてのファイルを処理することさえできればいいので、原理的にはシーケンシャルアクセスで処理できてしかるべきである。 まず、ファイルシステムについて。HDDやSSDなどのハードウェアにアクセスする際には、ファイル名などという概念はもちろん存在しない。ファイル名と実際のディスク上の対応を管理するのがファイルシステムの主な役割である。ファイルシステムは、ファイル名からそのファイルに対応するブロック番号(メモリアドレスみたいなもんだな)を調べて、そのブロック番号を指定してHDDやSSDにアクセスす

    ディレクトリの中にある大量の小さなファイルを高速に読み込む方法 - 射撃しつつ前転 改
  • エンコーディング検出ライブラリ「encdet」をリリース - spiritlooseのはてなダイアリー

    さて、久しぶりなわけですが。 タイトルの通りリリースしました。 http://wiki.github.com/spiritloose/encdet http://github.com/spiritloose/encdet/tree/master Mozillaの「Mozilla Universal Charset Detector」というやつのCバインディングです。 MozillaのMercurialリポジトリからコピってきて、Cのインターフェースをつけてautotools化してみました。 http://www.void.in/wiki/Universalchardet っていうのもあったんですが、家の方が結構変わってたり、 autotools化したかったり、もろもろあったので作りました。 今のところ LinuxとFreeBSDで動作確認してます。 #include <encdet.h>

    エンコーディング検出ライブラリ「encdet」をリリース - spiritlooseのはてなダイアリー
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    Code Archive Skip to content Google About Google Privacy Terms

  • C言語の対話環境ccons - きりかノート 3冊め

    cfe-dev MLに流れていた「[ANN] ccons : an interactive console for C based on clang and LLVM」 http://lists.cs.uiuc.edu/pipermail/cfe-dev/2009-April/004960.html http://code.google.com/p/ccons/ http://fizzysoft.net/personal/ccons.pdf clang/LLVMを利用した、irbのようなC言語の対話環境"ccons"というプロジェクトの告知。名前は似てるけどsconsとはぜんぜん関係ない。 Cのインタプリタというのはこれまでにもあったけれど、clangのライブラリを使ってるのはたぶん初じゃないかな。さっきチェックアウトしたr165でtestディレクトリを除いたファイルの総行数が3,000程

    C言語の対話環境ccons - きりかノート 3冊め
  • C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター

    これまでにC/C++ セキュアコーディングセミナーで使用した講義資料を公開しています。2010年度にセミナを実施した、文字列、整数、動的メモリ管理、書式指定文字列、CERT C セキュアコーディングスタンダード、ROSE については、それぞれ最新版の資料を掲載しています。 文字列 ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。 また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。 文字列では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。 C/C++ における文字列の特性 犯しやすい文字列操作の間違い 文字列の脆弱性 プロセスのメモリ構成 スタック破壊の仕組み コードイン

    C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター
  • 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
  • Big Endian と Little Endian の判別(Kodama's tips page)

    Big Endian(ビッグ エンディアン), Little Endian(リトル エンディアン) とは? 数値のメモリーへの格納方法で, 数値の上位桁がメモリーの下位にあるような場合に big endian と云い, 数値の下位桁がメモリーの下位にあるような場合に little endian と云う. (元ネタは, ガリバー旅行記の小人国のエピソード.) 例えば, 4バイトの数値 0x04030201 をメモリーに格納した場合以下のようになる. (c.f. endian.h) big endian では下位アドレスのメモリーから順に 04 03 02 01. 先頭のバイトに上位桁を格納している. (MacOS X/PowerPC, Solaris/SPARC など) little endian では下位アドレスのメモリーから順に 01 02 03 04. 先頭のバイトに下位桁を格納してい

  • bitsliceによる超高速ビット演算 : DSAS開発者の部屋

    bitslice とは Hack the Cell '09 に参加して知った、Cellに限らず一般的に使えるビット演算の高速化手法について紹介します。 Bitslice と呼ばれる手法では、ビット順を90度回転します。言葉で説明するよりもコードを見たほうが早いので、回転させるコードの例を見てください int x[32], y[32]; // x が元のデータ、y が回転後のデータ. for (int i = 0; i < 32; ++i) { int t = 0; for (int j = 0; j < 32; ++j) t |= ((x[j] >> i) & 1) << j; // x[j] の i ビット目を y[i] = t; // y[i] の j ビット目にする } この変換をすることで、y[0] には x[0] - x[31] の最下位ビットが、 y[1] には 2番目のビット

    bitsliceによる超高速ビット演算 : DSAS開発者の部屋
  • http://google-styleguide.googlecode.com/svn/trunk/google-c-style.el

    ;;; google-c-style.el --- Google's C/C++ style for c-mode ;; Keywords: c, tools ;; google-c-style.el is Copyright (C) 2008 Google Inc. All Rights Reserved. ;; ;; It is free software; you can redistribute it and/or modify it under the ;; terms of either: ;; ;; a) the GNU General Public License as published by the Free Software ;; Foundation; either version 1, or (at your option) any later version,

  • 革命の日々! mtraceの使い方

    何回調べても忘れてしまうシリーズ 今回はmtraceの使い方。 mtraceというのはmallocやfreeなどのメモリ管理系の関数をHookして、メモリリークを追跡してくれる便利なライブラリ関数です。 glibc付属なので特殊なソフトのインストールが必要ないのが利点。 使い方の注意点と手は Electric Fence などのmallocを乗っ取るライブラリと共用できないこと(アタリマエだ) malloc/freeのたびにファイルに書くので結構なオーバーヘッドを伴うこと。 スレッドセーフじゃないこと(これはmallocのhookの仕組みがタコいんです) mtrace()関数を呼び出すとトレースを開始する。というセマンティクスなのでシェルなどからイマイチ使いづらい所も欠点と言える。 まあ、実例を見てください。 まず、こういうファイルを用意 mtrace_on.c ---- #include

  • Lux IO - Yet Another Fast Database Manager

    Lux IO is a yet another fast database manager. It supports B+-tree and Array index in either cluster or non-cluster index. It's originally designed for storing large expanding data as a value in Lux Search Engine, but it's also pretty fast for small and a large number of data. Fast key lookup (B+-tree, Array) Support both clustered and non-clustered index mmap(2) the whole index structure in clust

  • 各種マップ実装の性能比較 - mixi engineer blog

    今回は小ネタのmikioです。key/valueのレコードを高速に格納・参照・削除する仕組みが連想配列とかマップとか呼ばれて親しまれていますが、Tokyo Cabinetのオンメモリマップの性能をC++の各種実装と比較してみました。 以下の実装を対象として、100万レコードの格納と検索にかかる時間を計測します。キーと値は各8バイトの文字列とします。 Tokyo Cabientのオンメモリマップ(TCMAP) STL(C++の標準テンプレートライブラリ)のmapとmulti mapとset GNU拡張テンプレートのハッシュマップ Googleのdense hashおよびsparse hash テストコードはこちらに挙げておきます。具体的な操作としては、マップオブジェクトを生成し、バケット配列の要素数をレコード数と同じにチューニングし、ループを回してレコード群を格納します。なお、STLのマップ

    各種マップ実装の性能比較 - mixi engineer blog
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

    ACM/ICPC(プログラミングコンテスト)系列の問題を解くことを目標にして,各種アルゴリズムを C++ で実装してみた.極めて意地が悪い類の問題には対応していないし,特定の入力に対して高速に動くということもない.計算量も最良とは限らない. これらを参考にする方への注意とお願い: これらの記述は正確とは限りません.参考文献を参照することを強く推奨します.間違っている場合は是非教えてください. これらのプログラムは間違っているかもしれません.各人で検証することを強く推奨します.バグがあれば是非教えてください. 分類が怪しいので,これはこっちだろう,ということがあればコメントを下さると助かります. 注意! 現在書き換え中 TODO 分類を正しく行う. 全体的に説明と使い方を詳しく. Verify していないものを Verify. ボロノイ図(いつになることやら……) 基 テンプレート グラフ

  • [Program][Bin] valgrind で main 奪う - 兼雑記

    ことほどさように main は全人類の至宝 LD_PRELOAD をもってしても簡単に奪えないということは、 main 蹂躙厨の間では有名な事実なのですが、 valgrind 使うと割に簡単なことに気付きました。 いつも通り Hello, world を書きます。 #include <stdio.h> int main() { puts("('-') Hello, world!"); } で実行。 > ./a.out ('-') Hello, world!平和です。こんな時代が続けば良かったのに! 不審なコードを書きます。 #include <stdio.h> void _vgrZU_Za_main() { puts("('-') ku ku ku ..."); } 主にシンボル名が不審です。さて実行。 > LD_PRELOAD=./hook_main.so valgrind --tool

    [Program][Bin] valgrind で main 奪う - 兼雑記
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    Code Archive Skip to content Google About Google Privacy Terms