タグ

cに関するsleepy_yoshiのブックマーク (26)

  • glibc, coreutitities, stl, linux kernel のソースコード - フリーフォーム フリークアウト

    移転しました http://please-sleep.cou929.nu/20091208.html

    glibc, coreutitities, stl, linux kernel のソースコード - フリーフォーム フリークアウト
  • clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション

    Emacs エディターで C 言語のプログラムを書く人向けに、入門用の解説がないように思う。そこで、知っておくと便利な機能をまとめてみた。 読者は、Emacs の操作とカスタマイズが最低限できる人を対象にしている。つまり、C-x C-f といったショートカット・キーが使えて、.emacs の設定ファイルがいじれる人。各機能について、基的な使い方とその効果、あと最低限の設定について書き出した。 目次 ソースの色付け インデント アラインメント コメント info マニュアル スペル・チェック タグ・ジャンプ 関数名の補完入力 コンパイルとエラー行ジャンプ ChangeLog ファイル 1. ソースの色付け Emacs は、C 言語のソース・ファイルを解析して、if や for といったキーワードに対して、自動で色を付ける。 色を付けることでソースにメリハリが生まれ、可読性が上がる。また、ス

    clmemo@aka: Emacs で C 言語プログラミングを始める人へのイントロダクション
  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • floatとdoubleの演算速度 その2 | LazyAttribute

    前にやったfloatとdoubleの演算速度比較エントリの訂正エントリになります。 たまたま見つけたC++プログラミング日記様のこのエントリ 「double型はfloat型より高速」といった説をたま見かけますが実際のところは同じ命令で処理されているため計算速度に違いはありません。ただし浮動小数点モデル/fp:preciseを使用した場合は単精度を精密に再現するため著しくパフォーマンスが低下します。 この/fp:preciseがVSではデフォルトで選択されるので、floatが遅くなっている、ということだそうです。 早速私も試してみた。 環境: Core2Duo E6600(2.2GHz) / WinXP Home / VC++2010EE 単純ループ(10,000 * 10,000)で測定 前回との違いはVC++2008EE→VC++2010EEになっただけ。 浮動小数点モデル/fp:pre

  • floatとdoubleの演算速度 | LazyAttribute

    floatは最適化前と後で変化ないのに、doubleは最適化すると凄く速くなる。なんだこれ。 floatのほうが速いって主張する人は最適化しない場合のを見ていて、doubleのほうが速い派は最適化後の値をみて主張してる訳か? floatが遅いというより、最適化するとdoubleが速くなるって感じだね。 どこかで「浮動小数演算用レジスタがdoubleだから、floatだと一旦キャストしたりしてコストが掛かるから遅い」みたいなことが書かれてたりするけど、この結果だけ見ると「doubleは浮動小数演算用レジスタが有効に使われるようになる」って言った方がしっくり来る。実際どうだか分かんないけどね。 ディスアセンブルすればもう少し解るかもしれないけど、そこまでする元気は無い。 float派も一応間違いではないけども、実際にリリースする時は最適化したものを出すわけなので、とりあえずfloatよりdou

  • Mac OS X と Linux で rand () の実装が違うのか - ny23の日記

    時間計測用のサーバ (Mac OS X 10.5) は 32GB しかメモリがないので,20GB ほどメモリを消費する L1-LLM (SGD) のハイパーパラメタの調整には 256GB のサーバ (Red Hat Enterprise Linux 5.4) を使っていたが,ライブラリまで含めて同じバージョンの gcc (4.5.0) でコンパイルした学習器が二つのサーバで微妙に異なるモデルを学習するのに気がついた.少し調べると,どうも(学習を安定させるため)訓練例を random_shuffle しているところが良くないらしい.gcc 4.5.0 の実装 (include/c++/4.5.0/bits/stl_algo.h) では,どちらも rand () を呼んで乱数を生成しているのだが,実験の再現性を確保するため srand () は敢えて呼んでないので,rand () の実装が同じ

    Mac OS X と Linux で rand () の実装が違うのか - ny23の日記
  • 総合目次 - 苦しんで覚えるC言語

    苦Cの内容の転載などは自由ですが、苦Cからの引用であることを明記してください。 (どこかに「苦Cより」と書かれていればOKです。) 学校や会社などで生徒(新入社員)へのテキストとして使用することも自由です。 その際、内容を修正したり、印刷して配布するのも自由です。 サイトについて 苦しんで覚えるC言語(苦C)は C言語入門サイトの決定版です。 C言語の基機能を体系立てて解説しており、 市販書籍と同等以上の完成度です。

    総合目次 - 苦しんで覚えるC言語
    sleepy_yoshi
    sleepy_yoshi 2010/11/23
    タイトルが体育会系ww
  • socket / programming memo

    [戻る] 概要 プロセス間通信の方法の一つとしてsocketを使う。 通信を行う二つのプロセスのうち、一方をserver、もう一方をclientとする。 serverは通信を行うための口を用意する。 通信の準備 通信を行う口は以下の手順で用意する。これはserverが行う。 socketを作る。(socket) socketに名前を付ける。(bind) 受け入れOKを示す。(listen) これで通信を行う口は用意された。この後、clientは自分で作ったsocketをこの口に結合(connect)し、serverはそれを受け入れる(accept)。serverのsocketに名前を付けるのは、clientがその名前のsocketに結合するのに識別名が必要だからである。 connectとacceptはどちらが先に発行されてもかまわない。お互い結合されるのを待つ。 socketの名前 soc

  • mmapのAPI : kei@sodan

    まずはmmap()のAPIを説明します。 fd = open(file, access); a' = mmap(a, n, prot, share, fd, offset); まずは普通にファイルをopen()で開きます。その後、mmap()でマップします。 aは「この仮想メモリアドレスにマップしてほしい」という値を指定できるのですが、普通はNULLでOKです。nはファイルの何バイト目をマップするのか、offsetは何バイト目からをマップするのかという指定です。 shareという引数がありますが、これは複数のプロセスが同じファイルをmmapしたときの動作です。 shareにMAP_PRIVATEを指定すると、そのプロセスは別のコピーを見て、プロセス間でデータは共有されません。メモリ上に複数データがある…ということで、ディスクにはどのデータを書いていいのか分からないので、書き込み結果はファイ

  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
  • IPC: socket | Shinta's Site

    ソケットが正常に作られると、ソケット記述子を返し、失敗すると -1 を返します。 次に、ソケットのアドレスの情報を構造体に格納します。その構造体は、ドメイン(プロトコルファミリ)によって異なります。 ローカル通信である PF_UNIX を利用する場合、sockaddr_un 構造体を利用します。 #include <sys/un.h> struct sockaddr_un{ sa_family_t sun_family; /* PF_UNIX */ char sun_path[108]; /* パスネーム */ }; インターネット通信である PF_INET を利用する場合、sockaddr_in 構造体を利用します。 #include <netinet/in.h> struct sockaddr_un{ short sin_family; /* ドメイン(PF_INET) */ u_sh

  • C言語のインライン関数について - OSのようなもの

    GCCや多くのコンパイラーは,C言語の標準(C99)にインライン関数が取り込まれるずっと前からインライン関数をサポートしていた。そのためかインライン関数の定義は様々で,同じ書式でも各コンパイラで挙動が異なる場合がある。 今回は,インライン関数の定義をまとめ。それぞれ出力されるアセンブラコードを比べてみる。 概要 先頭に inline という言葉を付けて関数を宣言すると,コンパイラーはそれをヒントにコードをインライン化――関数のコードを呼出し元に展開する。これにより,関数呼び出しのオーバーヘッドが取り除かれ実行が早くなる。 inline はコンパイラに対するヒントであって指示ではないから,様々な理由からヒントが無視され,インライン化されず実際の関数として出力される場合がある。例えば,その関数のアドレスが参照される場合や,関数定義内の再帰呼出しなどはインライ化できないし,コンパイラーの最適化を

    C言語のインライン関数について - OSのようなもの
  • Why LD_LIBRARY_PATH is bad

    By David Barr. Background This is one system administrator's point of view why LD_LIBRARY_PATH, as frequently used, is bad. This is written from a SunOS 4.x/5.x (and to some extent Linux) point of view, but this also applies to most other UNIXes. What LD_LIBRARY_PATH does LD_LIBRARY_PATH is an environment variable you set to give the run-time shared library loader (ld.so) an extra set of directori

  • ビット数を数えるルーチン - Weblog on mebius.tokaichiba.jp

    かつてJR横浜線 十日市場駅近くのMebius (CPU:Pentium 150MHz)より発信していたウェブログです。 32bitの立っているビット数を高速に数えるアルゴリズムとして、 int bitcount(unsigned long n) { n = ((n&0xaaaaaaaa) >> 1) + (n&0x55555555); n = ((n&0xcccccccc) >> 2) + (n&0x33333333); n = ((n&0xf0f0f0f0) >> 4) + (n&0x0f0f0f0f); n = ((n&0xff00ff00) >> 8) + (n&0x00ff00ff); n = ((n&0xffff0000) >> 16) + (n&0x0000ffff); return n; } こういうのが良く知られている。1行目で2ビットずつ足し合わせることで2ビットの中の

    ビット数を数えるルーチン - Weblog on mebius.tokaichiba.jp
  • 立っているビットの数を数える-C/C++-水無瀬の部屋

    立っているビットの数を数える関数を作る。 //********************************************************* // 値 uc を2進表記した場合に現れる 1 の数を返す。 //********************************************************* int // 立っている ビットの数 bitcount ( unsigned char uc ) { int bit; for( bit = 0; 0 != uc; uc = (unsigned char)(uc >> 1) ) { if ( 0 != (uc & 0x01) ) { ++bit; } } return bit; }//bitcount //************************************************

  • コンピューター:C言語講座:共有ライブラリについて

    コンピューター:C言語講座:共有ライブラリについて 概要 今回はC言語講座の読者の方からの提案で、共有ライブラリを取り上げます。 共有ライブラリは、静的なライブラリが実行形式に合体されるかたちでリンクされるのと違い、実行時に動的にリンクされるものという定義で、しかも他のプロセスと共有するかたちで実行時にリンクされて使われるものです。UNIXでは、プロセス間でファイルを共有するというと、mmap()を思い浮かべますが、まさにこれを使用し、共有ライブラリをマップして動作するものです。 一般のライブラリは、arコマンドによりアーカイブされて、要するにオブジェクトファイルを固めてつくるようなもので、普通は拡張子として「.a」を使用します。共有ライブラリはarコマンドは使用せず、ccコマンドから実行されるldコマンドが作成します。一般的に拡張子として「.so」を使用します。 ccあるいはldコマンド

  • http://www.kushiro-ct.ac.jp/yanagawa/project/library/

    Last modified: 2007/08/09 12:35:53 C 言語用ライブラリの自作 ライブラリとは,アプリケーション作成のための「あらかじめ用意されている部品」です. さまざまなアプリケーションで共通に利用できるような気の利いたライブラリがあれば, アプリケーションの開発作業は効率的に進められます. また,既存のライブラリを利用するだけでなく, 自分的にありがちな処理(「前にも書いたよなー」的な処理)を ライブラリ化しておくと後々のプログラミングが更に楽になります. (設計次第では苦しくなるかも...諸刃の剣です.) というわけで文書では,部品の作り方を解説しています. (質的な設計方法論ではなく,表面的な作業手順のみですが...) 基礎知識 コーディング: アイディア → アプリケーションソース プリプロセス(マクロ展開): アプリケーションソース + ライブラリヘッダ

  • https://pyyaml.org/wiki/LibYAML

    sleepy_yoshi
    sleepy_yoshi 2009/03/27
    C API
  • 2009-01-11

    そいや、readlink(1) とか stat(1) とかは OS 間で全然互換性がないな。 test file1 -ef file2 はポータビリティが怪しいということで、同じ機能を Perl で書いてみる。 #!/usr/bin/perl use strict; use warnings; use File::stat; sub usage { print STDERR "Usage: $0 file1 file2\n"; } sub main { if (@ARGV != 2) { usage; exit 1; } my ($file1, $file2) = @ARGV; my $st1 = stat $file1; my $st2 = stat $file2; if (not defined $st1) { exit 1; } if (not defined $st2) { exi

    2009-01-11
  • typedef クイズ 解答 - odz buffer

    ref:http://d.hatena.ne.jp/odz/20090111/1231689891 解説とかは面倒なので解答だけ。配列の typedef なんかは案外知らない人が多いのかな。まぁ、基的に変数宣言と一緒だ。 typedef int* pint; typedef int aint[10]; typedef int (*pfunc)(void); typedef double (*pfunc_array[3])(double);

    typedef クイズ 解答 - odz buffer