タグ

cに関するiwazerのブックマーク (11)

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • C/C++中規模プロジェクトのための超シンプルなMakefile | POSTD

    私は多くの小規模プロジェクトで Make を使ってきましたが、より大きな規模のプロジェクトになると、それは非常にうんざりするようなものでした。最近までは、自分のビルドシステムに行いたいことが4つあったのですが、Makeでの方法が分かりませんでした。 out-of-sourceビルド(オブジェクトファイルが、ソースとは分離されたディレクトリにダンプ出力されます) 自動生成される(かつ正確!)ヘッダの依存関係 オブジェクト/ソースファイルのリストの自動的な決定 インクルードディレクトリのフラグの自動生成 以下にこれらの全てを行える、C、C++、およびアセンブリで動作するシンプルなMakefileを紹介します。 MAKEFILE TARGET_EXEC ?= a.out BUILD_DIR ?= ./build SRC_DIRS ?= ./src SRCS := $(shell find $(S

    C/C++中規模プロジェクトのための超シンプルなMakefile | POSTD
  • 2016年、C言語はどう書くべきか (前編) | POSTD

    (訳注:2016/3/2、いただいた翻訳フィードバックをもとに記事を修正いたしました。) (訳注:著者のMattより、「文中で明言はしていないが、この記事の内容はx86-64 Unix/Linux/POSIXでアプリケーションをプログラミングする場合にフォーカスしている。他のプログラミング領域では、対象とするシステムに応じた(例: 8-bitの組み込みシステム、10年前のコンパイラ、多くの異なるCPUアーキテクチャで動く必要のあるアプリケーション、Win/Linuxでのビルド互換性など)特有のアドバイスが必要」との補足を頂いております。) 以下の文章は2015年の始めに書いたドラフトで、今まで公開していませんでした。私のドラフト用フォルダの中で誰の目も引かなかったため、大部分が書いた時のままです。公開するにあたり、単純に2015年を2016年に変更しました。 必要な修正、改善、苦情があり

    2016年、C言語はどう書くべきか (前編) | POSTD
    iwazer
    iwazer 2016/02/19
  • HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、サイボウズ・ラボの光成です。 PicoHTTPParserは@kazuhoさんたちが開発している高速なHTTPパーサです。 同じ作者によるHTTPサーバH2Oにも使われています。 11月4日の開発ブログによると、その時点でNode.jsなどに使われているhttp-parserの10倍程度の速度を誇るそうです(現在はhttp-parserも速度向上しその差は縮まりました。それでも4倍以上の差があるようです)。 該当ブログにはその高速化のためのノウハウが書かれていて大変興味深いです。ただIntel系CPUに搭載されているSIMD命令は用いられていませんでした。今回、@kazuhoさんと一緒に文字列処理専用のSSE4.2を用いることで1.7~1.9倍の高速化を達成しました(Improving Parser Performance using SSE Instructions (in

    HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • http://blog.monoweb.info/blog/2012/07/14/c99-array/

    iwazer
    iwazer 2013/07/31
  • GCC 4.8でぶっ壊れるSPECのお粗末なコード

    の虫: GCC 4.8のリリースノートとC++関連の変更で、GCC 4.8は464.h264ref: SPEC CPU2006 Benchmarkを壊してしまう。これはSPECベンチマークの規格違反によるものであると書いた。では、具体的に何なのか。それを解説している記事を発見したのでかいつまんで紹介。 Embedded in Academia : GCC pre-4.8 Breaks Broken SPEC 2006 Benchmarks Regehr: GCC 4.8 Breaks Broken SPEC 2006 Benchmarks [LWN.net] どうやら、SPECベンチマークは以下のようなコードを含むそうだ。 int d[16]; int SATD (void) { int satd = 0, dd, k; for (dd=d[k=0]; k<16; dd=d[++k])

    iwazer
    iwazer 2013/03/25
    “for文のオペランドにやたらに複雑な式を書きたがるC言語の慣習が悪い”
  • nginxの開発コミュニティにパッチを送った時の話 - pixiv engineering blog

    あけましておめでとうございます。年末年始はひどい風邪でほぼ布団の上だったbokkoです。 しかし、布団の上でもプログラミングはできるので過去に自分が作ったnginxのモジュールのコードを直したり、 ngx_mrubyにPull-Requestを送ったりして過ごしていました。 そんな中・・・ 年が明けてもなかなか風邪が治らず、朦朧とした意識の中でngx_mrubyに機能を追加してnginx体と 一緒にコンパイル & Valgrindで実行していると以下のエラーが出力されました。(nginxの拡張モジュールはnginx体のビルド時に静的に組み込まれます) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ==21338== Conditional jump or move depends on uninitialised value(s) ==21338== at 0x44

    iwazer
    iwazer 2013/01/16
  • VOYAGE GROUP エンジニアブログ : Linuxカーネルのlist, rbtree, sortを使ってみた!

    2012年12月21日10:40 カテゴリ Linuxカーネルのlist, rbtree, sortを使ってみた! ※ このエントリーは、VOYAGE GROUPエンジニアblog Advent Calendarの12/21分です。 こんにちは、VGエンジニアのポール(@pank7)です。 多分知ってる人はいらっしゃいますが、半年前にvgtechブログを書いた際にはまだ日語がまだダメなので、英語で書きました。今回はできるだけ頑張って日語で書きます。ご指導よろしくお願いいたします。 何を書きますか 私が書ける言語はそんな多くないですけど、普段自分が好きな言語だといえば、C言語はその中の1つです。Cのメリットとしてはやはり多いと思います。シンプルや移植性が良いや効率的やUNIX系OSと仲良いなどというのがあります。でも今の仕事で使っている言語のPHPPerlPython、Shellとか

  • xxd を使って画像などのバイナリデータをソースコードに含める方法

    iOS向けのライブラリやフレームワークを作成しているときに、どうしても画像などのバイナリデータをライブラリやフレームワークに含めたくなる時があります。たとえばUI系のフレームワークなどですね。このようなときに、たとえば静的ライブラリ(.aと.h)やフレームワーク(.framework)とセットで画像を一緒に同梱し、ユーザーのXcodeプロジェクトに一緒に含めてもらうという方法もあるのですが、この方法だと画像名がユーザーのプロジェクトに含まれている画像とかぶったりしてはいけませんし、管理が面倒になってしまいます。また、ライセンスがプロプライエタリなライブラリでは、画像などのリソースをあまり積極的にユーザーに公開したくないというニーズがあったりします。 そこでxxdツールのご紹介です。岸川先生に教えていただいたのですが、xxdというツールを使えばバイナリデータをC言語のヘッダファイルとして簡単

    iwazer
    iwazer 2012/01/30
  • OS Xの「現在非使用中」のメモリを開放する - teru_kusu’s diary

    自分のマックはメモリが 4GB の MacBook Pro。ちなみにこれがMacデビュー機。VMWareを2個以上起動するとMacの動きもVMWareの動きもカクカクカクカクで使い物にならなくなる。三万円くらいの8GBメモリがネットに有ったので換装してみた。Micron製のMT16JSS51264HY-1G1A1。ノーブランドの物はもうちょい安かったけど、なんとなくブランド名を冠してるやつにした。 !!!!!!!!! 驚きのサクサクサクサク具合。 VMWareを4個くらい、WinとかLinuxとか動かしても、窓の切り替えとか、窓一覧表示へのアニメーション、アプリの操作、一切引っ掛かりが無い。快適すぎてニヤニヤしてしまった。 でも困ったことが一つ。 ディープスリープ(ハイバネート)からの復帰に時々失敗する・・・。 特にメモリの使用量が多いときに復帰に時間がかかった挙句に失敗するようだ。 アク

    OS Xの「現在非使用中」のメモリを開放する - teru_kusu’s diary
  • Rubyのハッシュテーブルの仕組みを徹底的に理解する - ザリガニが見ていた...。

    ハッシュとは 一般的に理解すると抽象的で分かり難くなってしまうが、ハッシュとは、あるデータから、一定の計算をして求めた、目的に沿った数値、と思っている。それでは、どのような目的に利用されるのか?自分の知識で考えてみた。 暗号化 webアプリケーション等で、パスワードをDBに保存する時、生のパスワードをハッシュに変換して保存する。 Digest::SHA1.hexdigest等で求めたハッシュから、元のデータを復元するのが非常に困難という特性を利用する。 保存しているパスワードハッシュが、たとえ漏洩したとしても、不正利用を防止できる。 パスワードを照合するときも、ハッシュに変換して、保存しているパスワードハッシュと一致するかどうかで判断する。 同等の確認 長い文字列データを比較する時、全ての文字が等しいかチェックするのは非常に時間がかかる。 しかし、長い文字列データをハッシュに変換しておき、

    Rubyのハッシュテーブルの仕組みを徹底的に理解する - ザリガニが見ていた...。
  • 1