タグ

cに関するrskyのブックマーク (18)

  • GitHub - microsoft/mimalloc: mimalloc is a compact general purpose allocator with excellent performance.

    It also includes a robust way to override the default allocator in Windows. Notable aspects of the design include: small and consistent: the library is about 8k LOC using simple and consistent data structures. This makes it very suitable to integrate and adapt in other projects. For runtime systems it provides hooks for a monotonic heartbeat and deferred freeing (for bounded worst-case times with

    GitHub - microsoft/mimalloc: mimalloc is a compact general purpose allocator with excellent performance.
    rsky
    rsky 2019/06/25
    MSが開発したコンパクトで高性能なmalloc実装
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

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

  • CC500: a tiny self-hosting C compiler

    Introduction I wrote this tiny compiler, which translates a subset of C into x86 machine code, for fun. It has no use, unless it counts as educational. I called it CC500 because I initally guessed it would take about 500 lines. It turned out to be about 600 lines even without the comments and blank lines. With the comments and blank lines it has about 750 lines. It could be made shorter, but I wan

  • peg/leg

    peg/leg — recursive-descent parser generators for C peg and leg are tools for generating recursive-descent parsers: programs that perform pattern matching on text. They processes a Parsing Expression Grammar (PEG) [Ford 2004] to produce a program that recognises legal sentences of that grammar. peg processes PEGs written using the original syntax described by Ford; leg processes PEGs written using

    rsky
    rsky 2012/12/19
    peg/leg自身のソースコードがpeg/legから生成されているのがexcellent。pegは普通のPEG実装で、legはlex+yacc風文法のPEG実装。
  • 21st Century C

    Read it now on the O’Reilly learning platform with a 10-day free trial. O’Reilly members get unlimited access to books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers. Throw out your old ideas of C, and relearn a programming language that’s substantially outgrown its origins. With 21st Century C, you’ll discover up-to-date techniques that are absent

    21st Century C
    rsky
    rsky 2012/10/30
    あとで買う
  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #3/3

    [原文: What Every C Programmer Should Know About Undefined Behavior #3/3] このシリーズのPart 1では、Cにおける未定義な振る舞いと、未定義な振る舞いによって"安全な"言語よりもCのパフォーマンスがよくなることがある事例を示した。Part 2では、未定義な振る舞いが引き起こす驚くようなバグと、多くのプログラマがCに対して持っている誤解を見てきた。この記事では、これらに対して警告を出すためにコンパイラが直面する困難と、いくつかの驚かされる問題を取り除きつつパフォーマンスの優位を保つために、LLVMとClangが提供する特長とツールについて説明したい。 未定義な振る舞いを使って最適化するときにどうして警告してくれないの? 「コンパイラが未定義な振る舞いを使って最適化するときに、どうしてコンパイラは警告を出さないのか? ユー

  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #2/3

    [原文: What Every C Programmer Should Know About Undefined Behavior #2/3] 連載のpart 1では、未定義な振る舞いとは何か、未定義な振る舞いを利用して、「安全な」言語よりもハイパフォーマンスなアプリケーションを生成するためにCとC++コンパイラが未定義な振る舞いをどのように利用しているのかを議論した。この記事では、未定義な振る舞いが引き起こす全く驚くような結果を説明し、Cがどんなに"安全でない"かを話したい。part 3では、この驚くような結果をやわらげるために、親切なコンパイラは何が出来るのか (それが必須の機能でないとしても) について話したいと思う。 今回の記事は「Cプログラマにとって、未定義な振る舞いが怖くて恐ろしいことがあるのはなぜなのか」と呼びたい。:-) コンパイラの最適化は驚くような結果を引き起こす 近年

  • Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと #1/3

    [What Every C Programmer Should Know About Undefined Behavior #1/3 の翻訳です。] LLVMでコンパイルしたコードは、最適化を有効にしているとたまにSIGTRAPシグナルを生成するのはなぜなのか、と聞かれることがある。いろいろ調べたあと、(X86での話だが) Clangは "ud2" インストラクションを生成していたことがわかった。"ud2" は__builtin_trap()が生成するインストラクションと同じものだ。[訳注: #UD例外を発生させる命令。ソフトウェアが#UD例外をハンドルできているかテストするために使われる。つまり、ソースコードが未定義な振る舞いを使っていたから、LLVMはud2インストラクションを生成したのであって、LLVMのバグではない、ということ] こういう問題は幾つかあって、すべて、Cの未定義な振る

  • Zinnia: 機械学習ベースのポータブルな手書き文字認識エンジン

    Zinnia: 機械学習ベースのポータブルなオンライン手書き文字認識エンジン [日語][英語] Zinniaは機械学習アルゴリズム SVM を用いたポータブルで汎用的な オンライン手書き文字認識エンジンです。Zinniaは組み込みの容易さと汎用性を高めるために、 文字のレンダリング機能は持っていません。Zinniaは文字のストローク情報を座標の連続として受け取り、 確からしい順にスコア付きでN文字の認識結果を返すだけに機能を限定しています。 また、認識エンジンは完全に機械学習ベースであるために、文字のみならずユーザの任意のマウス・ペンストロークに対して任意の文字列をマッピングするような認識エンジンを小コスト作成することができます。 主な特徴 機械学習アルゴリズムSVMによる高い認識精度 ポータブルでコンパクトな設計 -- POSIX/Windows (C++ STLのみに依存) リエント

    rsky
    rsky 2011/08/01
  • 今年の年賀状ネタ - 桜花な日々

    去年(http://d.hatena.ne.jp/rofi/20100417/1271519352)に引き続き今年もやりました。 長いので詳細は続きから。 今年のネタ みなさん今年の干支は何でしょうか? そうですね、みなさん大好きうさみみ年兎年ですね! ということで今年のネタはこれです! #include <stdio.h>/* q=" =;;; $a= 'us' .'a' .'c' .'c' ;; $a=~ s/c/mi/g ;print $a; exit(); q&*/ #/**/ define p(c) putc(c ,stdout ) void pr( char *s, int/* */ e) {char *t =s ;for (; *s ;++s){ /* */ switch( *s ){ case 96: if (e) p(*s);else pr (t ,1);break; /

    今年の年賀状ネタ - 桜花な日々
    rsky
    rsky 2011/01/10
    “後にそれぞれの詳細は述べますが、このようにひとつのソースを複数の言語で実行できるものをpolyglotと言うそうです。”
  • http://mono.kmc.gr.jp/~oxy/d/?date=20071130

    rsky
    rsky 2008/02/16
    gcc拡張のアセンブラを書かずににSSE命令を使うためのヘッダ
  • lucille development blog » Blog Archive » Vector support of LLVM

    LLVM は SSE と AltiVec によるベクトル処理をサポートしていることがわかりました。 /* vec.c */ #include <xmmintrin.h> void mudah() { __m128 a, b, c; a = _mm_add_ps(b, c); } int main(int argc, char **argv) { mudah(); } こんなコードを、llvm-gccでコンパイルして(x86 darwin 上)まずはバイトコードを生成します。 $ llvm-gcc -c -emit-llvm -msse2 vec.c $ llvm-dis vec.o $ cat vec.o.ll ; ModuleID = 'vec.o' target datalayout = "e-p:32:32" target endian = little target pointer

    rsky
    rsky 2007/11/19
    SSE→ AltiVec, スカラー
  • いやなブログ: Cのポインタを整数に変換する

    Cのポインタを整数に変換する Cのポインタを整数に変換したいときがあります。このとき問題になるのは、ポインタのサイズが int と同じとは限らないということです。たとえば、 x86_64 の 64ビットのバイナリでは sizeof(int) = 4, sizeof(void *) = 8 となります。ポインタと同じサイズの整数を使いたい場合は C99 で導入された stdint.h で提供される intptr_t または uintptr_t を使います。 stdint.h には他にも int32_t や int64_t など、サイズつきの整数の型も提供されています。たとえば、uint64_t を使うと、64ビットの符合なし整数を扱うことができます。 私の場合、C++ のプログラムで void * から直接 uint64_t にキャストしようとしてはまりました。次のプログラムを x86_32

    rsky
    rsky 2007/09/20
    intptr_t, uintptr_t
  • アルゴリズムの紹介

    ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 こんなことやって意味あるのかどうか正直言って迷いました。プログラマはたいてい知っているような内容だし見る人もいないんじゃないかと思いましたが、これからプログラミングを始めてみようという方にとっては参考になるかもしれないし、何よりも自分にとって頭の中を整理できたりするので、これから定期的にやっていこうかと考えてます。 ところで、紹介する内容はほとんど過去に出版された書物関係から抜粋しています。一応下の方に参考文献として挙げておきますので興味を持たれた方は書店などで探してみてはいかがでしょうか? ということで、まずはライン・ルーチン(画面に直線を描画する)についての紹介です。

  • Phinloda is HERE

    (今週(?)の格言) 一見豪華主義 C言語 初級C言語Q&A (2003-06-06) C MAGAZINEに連載した Q&A のWWW版。 フィンローダのあっぱれご意見番 (1999-05-27) C MAGAZINEに連載していた無節操コラム。抜粋。 第81(78)回「機種依存文字」 「Cプログラミングの秘訣」 (1998-09-17) C MAGAZINE 1992年4月号に掲載された特集記事です。 プログラマーズフォーラム No.274「読ませる文章 (1)」 , No.275「読ませる文章 (2)」 , No.276「読ませる文章 (3)」 追加 その他 CG(2007-01-15) etc.(2003-01-09) 当の裏ページ(絶賛放置中) 裏の裏ページ Phinloda のもう裏だか表だか… 裏ご意見番 Phinloda のいつか聴いた曲 Phinlodaのいつか読んだ

    rsky
    rsky 2007/05/19
  • BohYoh.com【C言語講座】

    ■ C言語の歴史 C言語の歴史を解説します。 ■ C / C++ FAQ C言語およびC++に関してよく聞かれる159の質問とその答えです。 ■ 標準ライブラリ C言語で提供される標準ライブラリの仕様に関する完全な解説です。 ■ まずは慣れよう (PDF形式) 『新版明解C言語入門編』の第1章です。 ■ 演算と型 (PDF形式) 『新版明解C言語入門編』の第2章です。 ■ ポインタの基 (PDF形式) 『図解C言語 ポインタの極意』の第1章です。 ■ キーワード一覧表 C言語のキーワードの一覧表です。 ■ 演算子一覧表 C言語の演算子の一覧表です。 ■ ANSI / ISO / JIS用語対応表 C言語の標準規格であるANSI / ISO / JISで定義・利用されている用語の対応表です。 ■ 情報処理技術者試験・過去問題 基情報技術者試験(第2種情報処理技術者試験)の過去問題の解説で

    rsky
    rsky 2007/05/18
  • ポインタ虎の巻

    ポインタ虎の巻 初級篇~ポインタはなぜ難しいか? C言語を学ぶ上で、ほとんどの人が引っかかり、往々にCの勉強を放棄するきっかけとなるのがポインタである。しかし、ポインタはC言語という特定のプログラム言語だけではなく、コンピュータというものを理解する上で、必要不可欠な重要な機能である。C言語参考書では、ポインタを解説する上で「箱」のモデルを使って解説することが多いが、この虎の巻では、より突っ込んだ具体的な動作を解説することでポインタというものの質を解明して見ようと思う。参考書ではC言語の抽象レベルの上で解説がされるのが通例だが、虎の巻では単純化されたアセンブリ命令を使って具体的に解説する。 初級篇目次 変数とは何か? 疑似アセンブリの定義 文字列の処理 アドレスの取得 ポインタの型 関数呼び出しの手法 構造体とポインタ リスト構造 NEW 二進木 NEW 中級篇~ポインタの高度な技 ポイン

    rsky
    rsky 2007/05/04
  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

    rsky
    rsky 2007/05/04
  • 1