タグ

ブックマーク / 0xcc.net (7)

  • いやなブログ: 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

    nagwiki
    nagwiki 2006/04/22
    64ビット環境のことなんて考えたこともなかったや。ていうか、LPARAMやWPARAM使ってるWindowsプログラムってほとんど動かないんじゃ。。
  • setitimer システムコールを使って簡単なプロファイラを作る - bkブログ

    setitimer システムコールを使って簡単なプロファイラを作る setitimer システムコールを使うと一定時間間隔でシグナルを発生させることができます。頻繁にシグナルを発生させて、「シグナルが呼ばれたときにどこにいたか」を記録していけばサンプリング方式のプロファイラを作ることができます。 以下のコードは x86 の Linux を対象とした簡単なプロファイラです。prof_start() では setitimer() を使ってプロファイルをとるための下準備をしています。シグナルハンドラ prof_handler() ではシグナルが呼ばれた時点のコンテキストの情報からプログラムカウンタを取り出し、fwrite() でファイルに書きこんでいます。 LD_PRELOAD するだけで使えるよう、 prof_start() と prof_end() にそれぞれ constructor と d

  • いやなブログ: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

    Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで

  • バッドノウハウと「奥が深い症候群」

    計算機を使っていると、何でこんなことを覚えないといけないのだ ろうか、とストレスを感じつつも、それを覚えないとソフトウェア を使いこなすことができないためにしぶしぶ覚えなければならない、 といった類いのノウハウは多い。そうした雑多なノウハウのことを、 来は知りたくもないノウハウという意味で、私はバッドノウハウ と呼んでいる。 バッドノウハウは、ソフトウェアの複雑怪奇な仕様が歴史的に引き ずられ、根的な改善は行われないまま、そのノウハウが文書によっ て受け継がれることによって蓄積が進行する。Unix 上で広く使わ れているツールとしてはTeX, Emacs, sendmail, bind, perl, gnuplot, procmail などは、役に立つツールであると同時に、その 複雑怪奇な仕様によって長年に渡ってユーザを苦しめ続け、バッド ノウハウの温床として悪名が名高い。こうしたツー

  • bkブログ

    bkブログ プログラミングやバッドノウハウについてのブログ 2004-2011年に書いていたブログのアーカイブです。 机の上のもののワイヤレス化 - Microsoft Arc Keyboard の導入 iPodは何を変えたのか? 人が問題にぶち当たったときには、どうするか? ソフトウエアの肥大化について、の続き ソフトウェアの肥大化について ある程度の年齢を迎えたプログラマが抱える悩み Unicode の雪だるま 設定ファイルの整理 - Emacs 編 設定ファイルの整理 - zsh 編 パターン、Wiki、XP ~時を超えた創造の原則 マッキントッシュ物語 - 僕らを変えたコンピュータ GNU diff の地味だけど便利な機能 C++ の string と vector の reserve() の挙動 暗号化 - プライバシーを救った反乱者たち Best Software Writin

  • いやなブログ: リンクと同名のシンボル

    リンクと同名のシンボル C や C++ のプログラムで同じ名前のグローバルなシンボルが 2つ以上存在するとどうなるでしょうか。 Debian GNU/Linux sarge + GCC 3.3.5 での動作を見てみます。 静的リンクの場合 まず、次のようなファイル a.c があります。 a.c ではグローバルな関数 func() を定義しています。 #include <stdio.h> void func() { printf("func() in a.c\n"); } 次に、 b.c でも同様に func() を定義しています。a.c のものとよく似ていますが、 printf で表示されるメッセージは異なります。 #include <stdio.h> void func() { printf("func() in b.c\n"); } 最後に、 main.c では func() を呼び出

  • いやなブログ: Binary 2.0カンファレンス 2005 発表資料とレポート

    Binary 2.0カンファレンス 2005 発表資料とレポート Binary 2.0 カンファレンス 2005 は大盛況のうちに無事終了いたしました。開催にご協力いただいた皆様、スピーカーの皆様、参加していただいた皆様、大変ありがとうございました。 当日の発表資料とレポートをこのエントリでまとめています。参加報告などはこのエントリへのトラックバックで受け付けています。よろしくお願いいたします。 Binary 2.0 時代の到来 - 高林哲プログラムはなぜ Mona OS で動くか?fork?何それ? - ひげぽんDynamic Programming Language C -- 私は誰? - 浜地慎一郎g++と例外キャッチボール - 中村孝史G-Inspector -- GTK+ ランタイムインスペクション - 青笹茂実行時自己書き換え佳境 - 首藤一幸ハードコアバイナリアンへの道 -

    nagwiki
    nagwiki 2005/12/28
    当日の発表資料とレポートをこのエントリでまとめています。参加報告などはこのエントリへのトラックバックで受け付けています。よろしくお願いいたします
  • 1