タグ

Cに関するmiya2000のブックマーク (32)

  • Big Sky :: コマンドラインでC言語をワンライナー出来る「C」をWindowsにポーティングした。

    最近、kazuhoさんが作った「C」で遊んでいるのですが(いまごろかい!)、これWindowsでも使いたいなーなんて思ったのでポーティングしてみた。 C - a pseudo-interpreter of the C programming language PerlRuby では、ワンライナーで処理が書けて便利です。でも、なぜか C では書くことができません。仕事上の都合で、小さな処理を C 言語で書く必要があったので、ワンライナーも書くことのできる C 言語のインタプリタ(?)を作ってみました。 http://labs.cybozu.co.jp/blog/kazuho/archives/2006/01/large_c.php 目指せバイナリアン (C-0.06) C-0.06 をリリースします。 http://labs.cybozu.co.jp/blog/kazuho/archi

    Big Sky :: コマンドラインでC言語をワンライナー出来る「C」をWindowsにポーティングした。
    miya2000
    miya2000 2009/10/28
    「対象範囲せま!」
  • spin_lock とは - IT戦記

    一日一回スレッドの勉強 spin_lock とは 今のところの理解です。間違っているかもしれません。 スレッドが休止状態にならない。 ロックが取得できない場合は、 while (1) trylock() のようにスレッドが無限ループのような状態でロックが取得できるのを待ち続ける。 利点 スレッドが休止状態にならないので mutex を使うより CPU を占有している時間が長いので、コンテキストスイッチが発生する回数が少ない。 欠点 スレッドが休止状態にならないので、 lock 中は(割り込みが発生しないと)他のスレッドやプロセスがその CPU を使えなくなる。 昨日の mutex で作ったキューを spin_lock に変えてみる。 以下のエントリに元コードがあります。 http://d.hatena.ne.jp/amachang/20080617/1213694238 まず、構造体 pt

    spin_lock とは - IT戦記
  • pthread でキューを書いてみる - IT戦記

    この記事は全然ダメだったようです。 こちらに新しく書き直しました。 http://d.hatena.ne.jp/amachang/20080617/1213694238 こんな感じになった #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <pthread.h> static int* q; static int n; // 次に入れるインデックス static int l; // 次に出すインデックス static int s; static pthread_mutex_t m; static pthread_cond_t c; void initQ (size_t size) { n = 0; l = 0; s = size; // キューの領域確保 q = (int*)malloc(s * size

    pthread でキューを書いてみる - IT戦記
  • memcpy 最適化 - kazuhoのメモ置き場

    バイト単位でコピーするアホなコードの方が、勝手にベクトル化される分、gcc 内蔵のヤツより最大3倍高速なんだってwww memcpy() compiled with vectorizing compilers All current compilers for linux should support SSE2 auto-vectorization with #include <string.h> void *(memcpy)(void *restrict b, const void *restrict a, size_t n){ char *s1 = b; const char *s2 = a; for(; 0<n; --n)*s1++ = *s2++; return b; }(中略) x86-64 gcc memcpy() (中略) Linking in a user-compiled

    memcpy 最適化 - kazuhoのメモ置き場
  • 革命の日々! なんで、pthread_once()なんて存在するの?

    http://d.hatena.ne.jp/amachang/20080612/1213244820 お気に入りなサイトのIT戦記より // ここを volatile にする // (この変数の値はアトミック(つまり、レジスタにだけあってメモリにないということがない変数に)になる) volatile char* p = NULL; pthread_mutex_t m; void* f(void* _p) { // ロックかからない if (p == NULL) { pthread_mutex_lock(&m); // ここからはクリティカルセクション // 一個目の初期化時にここでブロックしたスレッドのために // もう一回 NULL チェック if (p == NULL) { // ここではまだ p に代入しない // 代入したら別スレッドで初期化されていない p が返ってしまう cha

    miya2000
    miya2000 2008/06/17
    「コンパイラは最適化で、tmpを消してpに直接malloc結果を入れる権利がある」
  • http://www.machu.jp/posts/20080401/p01/

    miya2000
    miya2000 2008/04/02
    Javaっぽく説明。
  • GrapeCity

    帳票・レポート 日仕様の帳票開発に必要な機能を搭載したコンポーネント ActiveReports for .NET ActiveReportsJS 表計算・グリッド Excel風のビューと表計算機能を実現するUIコンポーネント SPREAD for Windows Forms SPREAD for ASP.NET SPREAD for WPF SpreadJS 入力支援 快適な入力を実現する日仕様入力コンポーネントセット InputManPlus for Windows Forms InputManPlus for ASP.NET InputManPlus for WPF InputManJS 多段明細 1レコード複数行&日付表示に 最適なグリッドコンポーネント MultiRowPlus for Windows Forms 戻る コンポーネントセット Visual Studioで利用す

    GrapeCity
  • const char* const

    const char* const の2つのconstがそれぞれが何の値を変更不可にするのかのまとめ。 const char* char* const const char* const const char* の変数は、定数データへのポインタです。中身の変更不可、アドレスの変更可です。 覚え方 *「アスタリスク」は、その左側すべてに係る。 ↓ 「const char」のポインタ ↓ 「文字を変更不可能な文字列」へのポインタ ↓ 中身の変更は不可、アドレスの変更は可 char szAAAAA[ ] = "AAAAA"; char szBBBBB[ ] = "BBBBB"; const char* pBuffer = szAAAAA; // 定数データへのポインタ pBuffer[1] = 'C'; // 不可(コンパイルエラー) pBuffer = szBBBBB; // 可(正しい) c

    miya2000
    miya2000 2007/11/07
  • signed char と unsigned charの違い

    [戻る] yoss- 2002/05/21(火) 23:11:48 signed int と unsigned intの違いは表せる数字の範囲が違うのは分かるのですが、 signed char と unsigned charの違いが分かりません。 charは基的に文字として取り扱う為、第一ビットが+-の符号であろうが 関係ないと思うので、signed charだけあれば十分な気がするのですが。 signed charだけでは何か不都合があるのでしょうか? Win98 + Win2000 VC++6.0 MFC YuO [E-Mail] 2002/05/21(火) 23:24:45 charはC/C++の文法的には, 「最低8bitのサイズがあり,1byteの大きさである特殊な整数型」 になります。 #符号の有無は実装定義。 というわけで,shortより小さい整数型が欲しいときに, u

    miya2000
    miya2000 2007/11/07
  • はてなブログ | 無料ブログを作成しよう

    初めて梅干しを作ってみた話 今年の夏、初めて梅干しを作りました。 私梅干し大好きなんですが、自分で作るという発想がなくて…同僚が梅シロップを作っているのに影響されて去年から梅仕事を始めてみたんですが、そのときの説明書に「梅干しの作り方」というのも入っていて、えーー梅干しって自分…

    はてなブログ | 無料ブログを作成しよう
    miya2000
    miya2000 2007/11/07
  • ポインタとメモリと型(構造体)の関係 (2) - C言語 - 碧色工房

    これは Cygwin 上の gcc での結果で Visual C++ を利用した場合 long double は 8Byte となります。 あと、 sizeof の結果は char いくつ分のサイズかを返す訳ですが、今回実験している環境だけではなく、 ほとんどの処理系では char は 8bit(1Byte)であるため(っていうかそうじゃない処理系ってあるのかなぁ)、 ここでは sizeof の返す値の単位を Byte であるとして話を進めています。 さらに、何度も書いていますがここでやっていることは、ほとんどが処理系依存で、 このような結果になることを前提にプログラムを書くと、非常に移植性の低いものになってしまいます。 また、同じ環境でもコンパイラの最適化の影響とかを受ける可能性もないわけではありません。 ハードウェア的にどうのといってる部分がいっぱいありますが、 正直なところ私はそっち

    ポインタとメモリと型(構造体)の関係 (2) - C言語 - 碧色工房
    miya2000
    miya2000 2007/11/07
    アライメント
  • C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -

    新米と秋刀魚のわた焼き お刺身用の秋刀魚を買いました。1尾250円です 3枚におろして、秋刀魚のわたに酒、味醂、醤油で調味して1時間ほど漬け込み、グリルで焼きました 秋刀魚のわた焼き わたの、苦味が程よくマイルドに調味され、クセになる味わいです 艶やかな新米と一緒に 自家製お漬物 土…

    C/C++で2進数値を記述 - きまぎらすほしゅの不定記 -
  • 3項演算子のgcc拡張 - Psychs's blog

    http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=gcc%A4%CE%B3%C8%C4%A5%B5%A1%C7%BD 今日、gcc 拡張で 3項演算子 x ? x : y の最初の返値を省略して x ?: y と書けることを知った。 つまり、ruby で v = x || y || z と書くところを、C でも v = x ?: y ?: z; こんな感じに書けるわけだ。これはいい。 この書き方だと、x や y が一度しか評価されないので、マクロを書くときに便利だと思う。 追記 (2007.9.28) gcc では、|| を使うと 0 か 1 になるので、?: に利用価値がある。 printf("%d", 2 || 4); // => 1 printf("%d", 2 ?: 4); // => 2

    3項演算子のgcc拡張 - Psychs's blog
    miya2000
    miya2000 2007/09/28
  • 第250章 メールスロットの基礎

    今回からメールスロットをやります。メールスロットは比較的簡単に プロセス間で通信ができます。名前付きパイプのようにWindows NTでないと だめということもありません。サーバープロセスでメールスロットを作り、 送られてきたメッセージを読みとります。クライアント側はメールスロットに メッセージを送るだけです。 では、サーバー側から見ていきます。 HANDLE CreateMailslot( LPCTSTR lpName, DWORD nMaxMessageSize, DWORD lReadTimeout, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); メールスロットを作成します。 lpNameにはメールスロットの名前を指定します。 \\.\mailslot\mailslotname の形をとります。mailslotnameは自分で好きな名前を

  • コンピューター:C言語講座:strtok、2バイト文字について

    コンピューター:C言語講座:strtok、2バイト文字について 概要 C言語講座はシステムコール関連の話題が多かったのですが、今回は突然文字列処理についてです。Cの標準ライブラリには数多くの文字列処理関数が用意されていますが、その中で知っていると大変便利なのがstrtok()でしょう。文字列中からトークンを切り出すものですが、文字列処理では非常にありがたいものです。しかしこの関数ならではの危険も知っておく必要があります。 strtok関数 strtok()はCの標準ライブラリとしては比較的特殊で、strtok()自身がstaticなデータを保持します。使い方として以下のサンプルを御覧ください。 char  *ptr; ptr=strtok("abc,def;ghi",",;"); printf("%s\n",ptr);   /* "abc"が表示される */ ptr=strtok(NULL

    miya2000
    miya2000 2007/09/10
  • 初級C言語Q&A[index]

    [↑記事一覧] [ホームページ] 質問詳細リスト コンパイラの選び方(C MAGAZINE 1995-6) C言語を一から勉強するにはどのような環境を揃えればよいか? どのパソコンを買えばよいか? VC++とBorland C++は、どちらがよいか? gccとは何か? C言語の入門書は何がよいか? K&Rとは何か? 「その質問はシステムに依存する」とはどういう意味か? 処理系に依存した質問の例は? 動作が不定である、というのはどういう意味か? プログラムを別のマシンでコンパイルしたら動作しないのはなぜか? エンディアンが等しい別のマシンにプログラムを移植したのに動作がおかしい。 test.cというプログラムをコンパイルしてtestというコマンドを実行しようと したが、動作がおかしい。 リンク時にstrrevがないというエラーが出る。 文字列(C MAGAZINE 1995-7) C言語には

    miya2000
    miya2000 2007/09/03
  • ポインタ虎の巻~多次元配列の実現

    面白いことに、p == *p である。これはポインタが指す対象が配列でありポインタではないから、間接参照が生成されないのである(逆に言えばポインタの場合には、*p が間接参照をして、p != *p になる)。 上の表の結果と、二次元配列のシンボル x は、実質上一次元配列であることから、次のキャストは成功することになる。 int *p = (int *)x; だから次のように書ける。 int x[10][10]; int i; int *p = (int *)x; for( i = 0; i < 100; i++ ) { *p++ = i; } printf( "x[5][5] = %d\n", x[5][5] ); これは x が実質上一次元のポインタであることを示している。 この事情は関数引数の場合も同様である。二次元配列とポインタは混同されず、しかし int (*p)[10] とは一

    miya2000
    miya2000 2007/08/21
  • 配列の先頭アドレス

    新・闘わないプログラマ No.327 配列の先頭アドレス また春がやってきて、新入社員が入ってきたのですが、それに伴い研修などをやる必要があるわけです。今年は仕事の都合で私は講師をやらないのですが、テキストの選定にだけは関わっています。 で、プログラミング研修としてCのテキストを選ばないといけないのですが、さてどうしようか、と。私が講師をやるのならK&Rを使うのですが…。というわけで、Cのテキストになりそうなをいくつか眺めてみているところです。 そんな中で、 「“int a[10];”というふうに配列を宣言した場合、配列名“a”はその配列の先頭アドレスになります」 というような表現をよく目にします。 この表現、なんか気になるんですよね、私は。いや、これは「言葉のアヤじゃん」とか「初心者に厳密な説明したところで余計混乱するだけだ」とか、そういう意見も出てくることとは思いますが、せめて「配列

    miya2000
    miya2000 2007/08/21
  • ミニマルなHTTPサーバ - かそくそうち

    http://0xcc.net/blog/archives/000178.html このコードには長時間動作させる上で明らかにマズい点が二つあります。 (22:58追記: 問題のコードは既に修正されています。高林さん、すばやい対応ありがとうございます。) 「UNIXネットワークプログラミング」の別の節に解説はありますが、コードだけコピペした人が困らないよう指摘しておきます。 一つ目はSIGPIPEシグナルの発生に備えていない点です。 サーバーがレスポンスを返す前にクライアントがソケットを閉じてしまうと、write()がSIGPIPEシグナルを生成することがあります。 SIGPIPEの既定の動作はプロセスの終了なので、この状況が発生しただけでサーバーは勝手に(coreを残さず)終了してしまいます。 通常は次のような関数でSIGPIPEを無視します。 #include <cstring> #i

    ミニマルなHTTPサーバ - かそくそうち
  • C言語関係掲示板 過去ログ887

    >小数第3位を四捨五入の仕方が分かりません。 こんな関数を作るというのはどうよ? ちなみに、小数点第三位を四捨五入するなら、 round( val, 2 ); と言う具合に呼び出せば OK。 #include <stdio.h> #include <stdlib.h> /* ************************************************************ 関数名【 round() 】 丸め処理関数 処理概要 浮動小数点数を指定された精度で丸めた値を返す 引数 1) val = 丸めたい値 2) precision = 精度 戻り値 指定精度で丸めた値 ************************************************************ */ double round( double val, int precisi

    miya2000
    miya2000 2007/07/25