[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[b-free: 725] Re: B-Free APの開発環境



 林です。

In message <19971104162430I.shiozawa@myo.inst.keio.ac.jp>
   "[b-free: 724] Re: B-Free APの開発環境"
   "Hidekazu SHIOZAWA / 塩澤秀和 <shiozawa@myo.inst.keio.ac.jp>" wrote:
shiozawa> ライブラリレベルのOOPの話なのですが,
shiozawa> いろいろなオブジェクト(ウィンドウとかプロセスとか)に
shiozawa> 「thisポインタ専用」の領域を設けてくれるだけで,
shiozawa> ずいぶん,ライブラリが作りやすいと思います.

 この場合オブジェクトはC++オブジェクトではなくてウィンドウマネージャ
などのシステムが保持している管理データのことと考えて良いのですよね。
そうするとシステム管理領域にユーザデータへのポインタを保持させておく
ということになりますか。一見効率的ですけど、システムコールのコストを
考えるとユーザコード側でハッシュテーブル牽いた方が速くありませんか?

shiozawa> MFCは最近使っていないのですが,コールバックがあるたびに
shiozawa> Windowハンドル → ハッシュ表 → C++クラスへのポインタ
shiozawa> の変換をしていたのが我慢なりませんでした.
shiozawa> (Winodows 95で改善されたかどうかは知りません)

 MFCの中でやってることは良く分からないですけど多分変ってませんね。

shiozawa> Windowハンドルって,user.exeが管理している
shiozawa> Windowごとの構造体のアドレスだと思うんですよ.
shiozawa> それを,いったん数字と見なしてハッシュを通して,
shiozawa> 同じような目的のクラスのポインタに変換するなんて,
shiozawa> すげー無駄だと思うわけですよ.(マイクロソフトは
shiozawa> ほとんどオーバーヘッドはないと言っていたが...)

 Windows95の解析本に書かれていることによるとアドレスそのままでは
ないですね。何か変換を掛けているそうです。内部解析を妨害するため
だとか(^_^;)。NTでデバッグしてるとハンドルはえらく小さな値なので
アドレスではなく何か配列のインデックスではないかと思いますけど。


---
    林(takanori@ohsaki.meidensha.co.jp)