タグ

*Cに関するurza358のブックマーク (58)

  • ハッシュテーブルのスロット数が素数がよい理由と誕生日のパラドックス

    最近、プログラマーがハッシュテーブルを実装する機会は少ない。 現代のプログラミング言語では、ハッシュテーブルはライブラリーに完備されているためだ。 C言語でも、オープンソースを探せば、良いライブラリーが見つかる。 C言語をよく使う自分は、趣味でハッシュテーブルを自作して来た。 最近またハッシュテーブルを自作して、質を深く理解できたので、メモしておく。 C言語を学び、ハッシュテーブル、リストなどのデータ格納アルゴリズムを一度は実装して確認することで、コンピューターで大量のデータを取り扱う基を学ぶことができる。 ハッシュテーブルは、データをキーと値の組で保管するものだ。 キーは、数字ではなく、名前のような文字列や、複数の数値の組み合わせである。 値も複雑なデータの組み合わせとなる。 キーはデータを一意に区別できるものである。 複雑なキー情報に一致する値を素早く探し出すために、ハッシュという

  • komake: Make の -j オプションに潜む罠とその解決策

    ビルドツールのダジャレの大家と言えば @shinh さんですが、それはさておき、皆さんは今でも Make を使ってビルドすることが多いと思います。かく言う私も、その一人。 最近は CPU のコア数も多いですから、当然 -j 16 とか、やりたいわけです。大きいプロジェクトになればなるほど、威力絶大ですね。 ですが、ここで問題がひとつ。大規模プロジェクトでは Makefile が別の Makefile を呼び出すような依存関係が良く見受けられます。この際、ターゲット間の依存関係で菱形が存在すると(例: ターゲット sub1 と sub2 が shared に依存)、make shared が make sub1 と make sub2 から同時に起動されることが起こりえます。CMake で生成した Makefile の場合も、ターゲット毎に make を起動しますね。 二重起動が発生すると、

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

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

    urza358
    urza358 2018/11/02
  • C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita

    インクルードするだけで使えるNon-movingで正確なGCをC言語用に作りました。 行数がコメントを除いて100行に満たない非常に小さなライブラリです。 GCのアルゴリズムとしてはCheneyのコピーGCを採用しています。 通常のCheneyのコピーGCではメモリ空間のうち半分が無駄になってしまいメモリ効率が悪かったり、 GC発生時にオブジェクトが移動してしまいC言語のようなポインタを直接触れる言語との相性が悪いという欠点がありました。 今回はヒープ全体を二重連結リストとして管理することでそのような問題を解決しています。 ちなみにこれはTreadmill GCのアイデアと同じです。(が、アルゴリズム自体はTreadmill GCではありません。) APILinuxのlist.hに非常に近い見た目になっています。 ある構造体をgcで管理したい場合はstruct gc_head型のメンバを

    C言語でインクルードするだけで使えるNon-movingで正確なコピーGCを作った - Qiita
    urza358
    urza358 2017/10/10
  • CUnitでCプログラムの単体テストをする - Qiita

    //============================================================================= // ファイル : main.c //============================================================================= #include <CUnit/CUnit.h> #include <CUnit/Console.h> //----------------------------------------------------------------------------- // プロトタイプ宣言 //-----------------------------------------------------------------------------

    CUnitでCプログラムの単体テストをする - Qiita
  • MySQL で LINQ を使う | Moonmile Solutions Blog

    このブログの MySQL の記事をまとめていると「あれ?意外に少ない」と気が付いて、ADO.NET 絡みでMySQLを扱うTipsでも追加しようかと探していたところなのですが、なんと、LINQ で MySQL を使えることを発見。と言いますか、「至高の技」の執筆中に確認しなかったのが痛恨の一撃。 MySQL :: MySQL 5.1 Reference Manual :: 20.2.4.5 Tutorial: Using an Entity Framework Entity as a Windows Forms Data Source http://dev.mysql.com/doc/refman/5.6/en/connector-net-tutorials-entity-framework-winform-data-source.html どうも、日語の情報が少ないなぁと思っていたら、

    urza358
    urza358 2015/06/05
  • Deep Dive C# 6.0

    2015/4/11 dotNetConf 2015 Japan with JXUG https://atnd.org/events/63844 にて登壇。

    Deep Dive C# 6.0
    urza358
    urza358 2015/04/15
  • 「【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版]Ver.2.0(ESCR Ver.2.0)」PDF版と付録データの公開:IPA 独立行政法人 情報処理推進機構

    概要 IPA/SECでは、組込み機器のソフトウェア開発において、C言語を用いて開発される組込みソフトウェアのソースコードの品質をより良いものとするために、組込みソフトウェア開発におけるコーディングの際の注意事項やノウハウをルール集としてまとめた「組込みソフトウェア向けコーディング作法ガイド ESCR[C言語版]」(以下、ESCR(*1) )を発行しています。 この度、2014年3月7日に発行した「【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版] Ver.2.0 (ESCR Ver.2.0)」の内容を電子データ化したPDF版を公開します。 また、それに併せて以下の2点の付録データも新たに公開します。

  • Policy Design Pattern and Variadic Template Technique

    urza358
    urza358 2015/04/09
  • マイクロプロセッサ演習

    手続きと関数

    マイクロプロセッサ演習
  • メモリの 4 領域

    演習ではこれまでメモリの領域として「テキスト領域」、 「データ領域」、「スタック領域」の 3 つを取り扱った。 章ではこれらのメモリ領域が C 言語や C++ 言語でどのように使われるかを 簡単に解説する。 章は C 言語の知識が必要であるため、自信が無い人は読み飛ばして構わない。 なお、各領域の名称は処理系によって異なることがある (たとえば 80x86 系では「テキスト領域」は「プログラム領域」と呼ばれる、など) が、その質は多くの処理系で共通している。 まず、C 言語で扱うメモリの論理的な模式図は 図 5 のように 4 つに分けられる。 このうち「静的領域」と「ヒープ領域」を合わせて「データ領域」と呼ぶことも あり、演習でもその呼び方をしてきた。 なお、「論理的」という言葉は図 5 がハードウェア上での配置 をそのまま表しているのではなく、OS によって提供された仮想的なメ

    メモリの 4 領域
  • 第6章 C言語との連携 | densan-labs.net

    第6章 C言語との連携¶ LuaとC言語を連携させるためには,スタックの仕組みを理解しておかなければなりません. LuaからC言語側にデータを渡す,またはC言語側からLuaにデータを渡す場合, Luaスタックと呼ばれるものを使用します. スタックとは¶ スタック(Stack)は上図で表すようなデータ構造です. データは上から順に積み上げられていきます. スタックにデータを積み上げる動作を プッシュ(Push)するといいます. 下図はスタックに値10をプッシュしている様子を 表しています. またスタックの上部のデータを一つ削除する動作を ポップ(Pop)するといいます. 下図はスタックから値をポップしている様子を表しています.

  • LangScan: program analyzer for source code search engine

    What's LangScan? LangScan is a program analyzer for source code search engine. What's New 2005-10-31: LangScan 1.2 Released! Added Eiffel support. Added D support. Added Io support. Added Lua support. Enhanced OCaml support. Some bugs have been fixed. 2005-09-26: LangScan 1.1 Released!

  • ANSI-C システム 仕様書(プログラム 設計書) テンプレート 例 (ANSI-C対応)

  • 今、Cで開発するためのスタンダードを知るための本 - L'eclat des jours(2013-09-30)

    _ 今、Cで開発するためのスタンダードを知るための 例によってアスキーの鈴木さんから、をもらった。花井さんのモダンC言語プログラミングだ。なお、似たような題の洋書があって、しかも花井さんは翻訳もするので、そのの翻訳書と勘違いされる可能性もありそうだが、完全にオリジナルだ。 Cは、Unixと共に(というか少し遅れて)生まれたということは、すでに40年以上の歴史があり、それだけの年月がたてば、COBOLなどと同じく老害言語と言われてもこれっぽっちもおかしくはない。 ところが、COBOLと異なり開発者市場がどんどん先細り(あるいは固定化)されるということはなく、むしろ増えている。それどころか最近の調査では最も利用されている(TIOBE 2013)。 一方、C++が先鞭をつけたビジネスプログラミングへのオブジェクト指向プログラミングの適用は、Java、Objective-C、C#と種類を増や

  • C MAGAZINE - プログラミングの禁じ手Web版 C言語編

    プログラミングの禁じ手Web版 C言語編 /Top/今週のソースコード/プログラミングの禁じ手Web版 C言語編/ [←前] [次→]  [C言語版一覧] [C++版一覧] 誌2000年4月号に掲載された「特集1 プログラミングの禁じ手 C言語編」よりWebサイト用に抜粋したものです。ソースコードとともに公開いたします。作者の真紀俊男様に感謝します。 プログラミングは,「なぜかうまく進めなくなる」,「だんだんと期待した通りに動かなくなる」など,とても「イヤ」な面があります。そうした現実に直面したときに稿がお役に立てれば幸いです。

  • Make と Makefile の説明

    まだ完成途中です back 注意: このページの内容には、おそらく多くの間違いがあります。 リンクされているので残しておきますが、利用には注意してください。(2008年3月、新山) ここではおもに make の使い方 と Makefile の書き方について 説明しています。じつは make の種類にはいろいろあり、ここでは GNU make (gmake というコマンド名のこともある) を 対象にしています (BSD の pmake でも基的な部分は同じですが、 マクロ定義などは違うところもあるので注意してください)。 わかりにくい箇所とか、まちがってる箇所がある場合はメールください。 Contents make はどんなときに使うか Makefile を作る make の実行 Makefile の文法リファレンス 多段 make について (未完成) Makefile の例 (未完成)

  • C言語

    C言語をやってみよう,ふと思い立った.かなり久しぶりだ.大学当時Cは講義であった.学生時代怠けまくった結果(?)私はCよりも,趣味でやっていたJavaの方が書いたコードの行数は多い.だが,やはり「たしなみ」としてC言語はやっておかねばなるまい. 基(?)ライブラリ編 プロセス制御 シグナル パイプ IPC Pthread Socket 端末制御 curses CUnit OpenSSLを使用したCプログラミング その他 基(?)ライブラリ編とりあえず,ライブラリにある関数をいろいろ試してみる.もちろん(?)Debian環境で. ファイル操作 2003-07-20T15:13+09:00 matsu GNU/Linuxシステムでのファイル操作について.ここでは特にシステムコールを用いてファイル操作する方法について. 標準入出力ライブラリでのファイル操作 2003-07-20T15:13+

    urza358
    urza358 2012/08/29
  • CreateWaitableTimer

  • C言語の正しいヘッダファイルの書き方 - saito’s blog

    最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの書き方が分かっていないと思われる箇所が多々見られました。 実際、C言語の入門書でもヘッダファイルの書き方を詳しく説明しているものは、僕の知っている限りでは存在しないので、C言語を使っていてもヘッダファイルの正しい書き方を知らない人が少なくないのではないかと思われます。 そこで、このエントリでは、C言語のヘッダファイルの書き方について、僕が知っているテクニックをまとめてみました。 インクルードガードを書く ヘッダファイルファイルで他のヘッダファイルをインクルードしていると、いつの間にか同じヘッダファイルを2回インクルードしてしまうことがあります。 例

    C言語の正しいヘッダファイルの書き方 - saito’s blog