タグ

cに関するpotato777のブックマーク (24)

  • linuxカーネルで学ぶC言語のマクロ - Qiita

    はじめに 記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。

    linuxカーネルで学ぶC言語のマクロ - Qiita
  • Implementing a Virtual Machine in C

    If you're looking for a better understanding of computers or the C language in general, try your hand at writing a virtual machine in C from scratch.Menu Implementing a Virtual Machine in C 07 May 2015 Introduction Here's the GitHub to show what we'll be making, you can also compare your code to this repository in case you have errors. GitHub Repository I thought I would write an article about bu

    Implementing a Virtual Machine in C
    potato777
    potato777 2015/05/10
  • C Extensions (Using the GNU Compiler Collection (GCC))

    6 Extensions to the C Language Family ¶ GNU C provides several language features not found in ISO standard C. (The -pedantic option directs GCC to print a warning message if any of these features is used.) To test for the availability of these features in conditional compilation, check for a predefined macro __GNUC__, which is always defined under GCC. These extensions are available in C and Objec

    potato777
    potato777 2015/04/10
  • sprintf を最大10倍以上高速化するプリプロセッサ「qrintf」を作った

    最近H2OというHTTPサーバを書いているのですが、プロファイルを取ってみるとsprintfが結構な時間をっていて不満に感じていました。実際、sprintfは数値や文字列をフォーマットするのに十徳ナイフ的に便利なので、HTTPサーバに限らず良く使われる(そしてCPU時間を消費しがちな)関数です。 では、sprintfを最適化すれば、様々なプログラムが より高速に動作するようになるのではないでしょうか。ということで作ったのが、qrintfです。 qrintfは、Cプリプロセッサのラッパーとしてソースコードに含まれるsprintfの呼出フォーマットを解析し、フォーマットにあわせたコードに書き換えることで、sprintfを高速化します。 たとえば、以下のようなIPv4アドレスを文字列化するコード片を sprintf( buf, "%d.%d.%d.%d", (addr >> 24) & 0xf

  • Cコンパイラをスクラッチから開発してみた(日記)

    以前に8ccというCコンパイラをゼロからひとりで開発していたときのログです。40日でセルフコンパイルできるところまで到達しています。日付はすべて2012年です。コードとヒストリはすべてGitHubで見れます。 3月4日 というわけでコンパイラを作っているわけだけど、1000行くらい書いたらそれなりに動き始めてきた。こんなのも動くし: int a = 1; a + 2; // => 3 こういうのも通る。 int a = 61; int *b = &a; *b; // => 61 文字列は文字の配列として扱っていて、配列をポインタに成り下げる振る舞いも実装しているので、こういうのも通る。関数呼び出しもある。 char *c= "ab" + 1; printf("%c", *c); // => b 前回もこのあたりはがんばって実装したからここまで作るのはわりと単純作業かも。二回目だから配列とか

    Cコンパイラをスクラッチから開発してみた(日記)
    potato777
    potato777 2014/09/07
  • GitHub - c9s/h3: The Fast HTTP header parser library

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - c9s/h3: The Fast HTTP header parser library
    potato777
    potato777 2014/07/22
    "The Fast HTTP header parser library"
  • rand(3) / random(3) / arc4random(3) / et al.

    Written by Mattt August 12th, 2013 This article has been translated into: 中文 What passes for randomness is merely a hidden chain of causality. In a mechanical universe of material interactions expressed through mathematical equations, it is unclear whether nature encodes an element of chance, or if it’s a uniquely human way to reconcile uncertainty. We can be sure of one thing, however: in the clo

    rand(3) / random(3) / arc4random(3) / et al.
    potato777
    potato777 2014/07/19
    arc4random(3) を使う
  • C++ patterns using plain C

    So that’s it, you read this article, and this post, and this, and this, and you spent too many time trying to debug 8 pages long compilation error messages, and you also spent hours trying to follow your code path involving operator overloading, copy constructors, and virtual class methods called from constructors or whatnot. You have had enough of it. Yout think it’s time for you to stop using C+

    potato777
    potato777 2014/06/25
  • C99の仕様

    長い歴史を持ちながら、依然として人気の高いC言語。その最新仕様の情報にキャッチアップするための連載スタート。今回は1999年に策定された「C99」を取り上げる。 連載 INDEX 次回 → C言語(以降、単にC)はDennis Ritchieによって1969~1973年の間にベル研にて開発されたプログラミング言語である。長い歴史を持つと共に非常にポピュラーな言語で、プログラマーでCを知らない人はまずいないと言っていいだろう。プログラミング言語のシェアを調査しているTIOBEでも、ここ最近は常に1、2位を占めている。 Cの言語仕様は今から25年近く前である1989年に初めて規格化され、これは一般に「ANSI-C」と呼ばれている。ANSI-Cは長らくCの言語仕様のスタンダードの位置を占め、世の中の大半のプログラマーは、このANSI-Cに慣れ親しんでいることだろう。しかし、実はCの言語仕様はその

    C99の仕様
    potato777
    potato777 2014/02/06
  • ポインタ配列とダブルポインタ変数の違いを理解していないプログラマー|SGソフトウェアの開発日記(鉄道ゲーム開発もしてますが最近はDLNAがらみの開発中心)

    SGソフトウェアの開発日記(鉄道ゲーム開発もしてますが最近はDLNAがらみの開発中心) ハードディスク故障に備えるための省スペースデータ保護ツール「RAIDっぽい」や、DVD-RAM用コピーツール「VRストリーム抽出ツール」など、各種ツールの商品開発の日々の出来事や、よもやま話などを綴っています。 PR SG箱庭鉄道線路を敷いて列車を走らせよう! SG箱庭鉄道 PCユーティリティファイル名の番号の桁を揃える 整列! マルチドライブ高効率バックアップ RAIDっぽい 保管期限切れのファイルを一括削除 保管期限切れファイルクリーナー まとめてファイルを移動 ファイル移動ツール ファイルの重複を検出 ファイル重複検出ツール サブフォルダ内のファイルを集約 サブフォルダ内ファイル集約ツール 空のフォルダーを削除 空フォルダー削除ツール ホームネットワーク複数のMPE

  • Introducing Wire Protocol Buffers

    APIsAnnouncing the Winners of the Square Local Communi...Building apps to connect businesses with their local community APIsQ&A: Discover what’s new in the Mobile Payments SD...Learn about how KIOS, a kiosk software, conducted early stage testing of the SDK...

    Introducing Wire Protocol Buffers
  • Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、JSMNを試してみた。 何も見ずにC++でjsonパーサが書けるか試してみた。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 最近は結構 matsuu さんのブクマから見つけて記事を書いてたけど今日はそうじゃない所からご紹介。 Jansson — C library for working w

    Big Sky :: C言語から使えるJSONパーサ、jansson がとても直感的で良い
  • アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ

    子供のころからできるだけ手抜きして成果を挙げることだけは長けている山です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,

    アセンブリ読んだら負けかなと思ってる - 誰かの役に立てばいいブログ
  • mrubyでmemsetやmemcpyが少ない理由.

    リンク先には,次のような記述があります. Looks like on ARM architecture, GCC and other compilers may mis-optimize memcpy and assume certain memory alignment, whichcreates errors on unaligned access. To avoid this, either don't use memcpy, or, cast the pointers to char* to disable this misoptimization. More details here: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3934.html 意訳) ARM みたいに memcpy で

    mrubyでmemsetやmemcpyが少ない理由.
  • 64ビットプログラミングのポイント

    従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介しよう。(特集:64ビットコンピューティング最前線) C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラ

    64ビットプログラミングのポイント
  • Cflow - GNU Project - Free Software Foundation

    GNU cflow GNU cflow analyzes a collection of C source files and prints a graph, charting control flow within the program. GNU cflow is able to produce both direct and inverted flowgraphs for C sources. Optionally a cross-reference listing can be generated. Two output formats are implemented: POSIX and GNU (extended). The package also provides Emacs major mode for examining the produced flowcharts

    potato777
    potato777 2013/05/26
  • Index

    The new location of my blog is here: https://llbit.github.io/

    potato777
    potato777 2013/05/25
  • Some dark corners of C

    Hello for the secondthirdfourth time, Reddit. This was a 10-minute lightning talk. It is a presentation, not a book. I spoke when presenting it. Not everything that was said is on these slides, as that would have made for a boring talk. Yes, there are counter examples to some of the things mentio...

    Some dark corners of C
    potato777
    potato777 2013/03/10
  • A nice, little known C feature: Static array indices in parameter declarations

    A nice, little known C feature: Static array indices in parameter declarations The people who created C sure loved keeping the number of keywords low, and today I’m going to show you yet another place you can use the static keyword in C99. You might have seen function parameter declaration for array parameters that include the size: The function will still receive a naked int *, but the [10] part

    potato777
    potato777 2013/02/19
  • PostgreSQLのメモリ管理 | Everyday Deadlock

    この記事は PostgreSQL Advent Calendar 2012 の13日目の記事です。 昔からデータベースエンジン関係の研究をしているうちの研究室 では、「PostgreSQLを使う」というとPostgreSQLのコードをいじってTPCベンチマークを走らせることを指すので、未だにSQLとか書けなくて困ることが多いのですが、幸か不幸かPostgreSQLのソースコードはそこそこ読めるようになりました。 そんなわけで、PostgreSQLのソースコードの中でも、今回のAdvent Calendarのネタとしてメモリ管理の部分について紹介します。 これからPostgreSQLのコードを読んでみたいという人にとっては、コードのどの部分を読んでも必要となる知識なので、割と役に立つとおもいます。 【宣伝】大晦日にデータベースの同人誌コミケで売ります 題に入る前にいきなり宣伝で恐縮ですが