【コラム】
今回は、Core Foundationの基本構成要素の3つ目、CFRuntimeBaseを解説しよう。これは、Core Foudationでのインスタンスを表すものである。
CFRuntimeBaseは、すべてのCore Foundationオブジェクトの、先頭に位置するものとなる。言い換えると、CFRuntimeBaseを先頭に持っているものが、Core Foundationでのオブジェクトである、と考える事もできる。このようなオブジェクトの例としては、本連載の第34回で、CFStringを取り上げた。この構造体には、文字列を保持するためのフィールドがいろいろとあったが、それらの先頭にあったのが、CFRuntimeBaseである。
では例によって、そのCFRuntimeBaseの定義を見てみよう。Base.subprojディレクトリの下にある、CFRuntime.hに含まれている。
このように、3つのフィールドから構成されている。1つ目のフィールドは、_isaである。そう。この連載の読者ならば、この名前に見覚えがあるだろう。Objective-Cで、オブジェクトやクラスの動的な型情報の判別に欠かせなかった、あのisaポインタと同じ名前である。もちろん、これは偶然ではない。CFRuntimeBaseにおけるisaは、Objective-Cでのisaと同じ役割を果たすことになる。また、実はそれ以上の機能も含まれる事になる。ここに隠されている仕組みを解き明かすのが、Core Foundationの秘密の鍵だ。次回以降で、詳しく見ていこう。
次にあるフィールドは、_rcだ。これは、retain countの頭文字になる。日本語では、参照カウント、保持数カウントなどと呼ばれる。このフィールドには、インスタンスの参照カウント数を入れておく。
ここで、少し余談になるが、参照カウントの話をしておこう。ある程度の完成度を有するプログラミング言語やフレームワークならば、メモリ管理の手法を提供している。参照カウントは、その一種だ。基本的な考え方は、あるオブジェクトが誰かに参照されていたら保持する。誰からも参照されなくなったら、解放する、というものだ。Core FoundationおよびObjective-Cも、この手法を使っている。
ただし、近年に登場しているスクリプティング言語や、Javaのようにバーチャルマシンを利用するフレームワークでは、メモリ管理としてガベージコレクタを提供するのが主流になっている。それらと比較すると、参照カウンタという手法は、プログラマの手間が増える分、いささか古くさい感は否めない。だが、機能としては十分であるし、プログラムに応じてメモリ解放のタイミングを決定できるので、最も高いパフォーマンスを得る事ができる事は確かだ。
さて、CFRuntimeBaseの話に戻ろう。最後のフィールドは、_infoだ。名前のとおり、このオブジェクトの情報を表すためのフィールドである。このフィールドの使われ方については、CFRuntime.cにコメントがある。
つまり、15から8 bit目までは、オブジェクトのタイプを表す。7から0 bit目までは、将来のために予約されている。では、上位8 bitにあるタイプとは何か?実は、ここに設定されるのが、前回紹介したCFTypeIDの値だ。前回の内容を思い出すと、CFTypeIDはクラスを一意に表す整数値だった。わざわざ、すべてのクラスに対してユニークな値を割り振っていたのは、このCFRuntimeBaseで利用するためだ。
以上が、CFRuntimeBaseが持つフィールド、つまりすべてのオブジェクトが持つ情報だ。isaポインタ、参照カウンタ、型情報を表すID、がある。
さて。これでCore Foundationの構成要素、CFRuntimeClass、CFTypeID、CFRuntimeBaseを一通り見てきた。だが、お気づきの通り、最も大事なポイントの説明は飛ばしてきた。それは、CFRuntimeBaseのisaポインタである。
次回は、いよいよこれの説明に入ろう。ここから、Core FoudationとObjective-Cの、奇妙で巧妙な関係が見えてくる。
【コラム】ライトニングJava 第50回 ネットワークプログラミング(5) - ServerSocketを使った実装例 NewIO編(1)
【コラム】ライトニングJava 第49回 ネットワークプログラミング(4) - ServerSocketを使った実装例 スレッド編
| Silicon Labs、小面積/省電力を実現するPCIe用クロックジェネレータを発表 [11:13 5/24] |
| Infineon、パワーMOSFET向けにTO 247-4ピンパッケージの提供を開始 [10:59 5/24] |
| Xilinxと住友電工、ネットワーク運用コスト削減向けソリューションで提携 [10:50 5/24] |
| フルーク、高確度かつ多機能な参照用圧力ゲージ「2700Gシリーズ」を発売 [10:38 5/24] |
| タンパク質のエンドレス合成 [10:31 5/24] |
|
愛人を自宅に連れ込み中に妻が帰宅! 「浮気夫」の"修羅場回避"の大芝居! [11:18 5/24] 恋愛・結婚 |
|
リンガーハット、「からまろ坦々麺」と「からまろ冷やし麺」を期間限定発売 [11:16 5/24] ライフ |
|
サイバーエージェントら3社、渋谷でスマホを活用したO2Oサービスを提供 [11:16 5/24] エンタープライズ |
|
Silicon Labs、小面積/省電力を実現するPCIe用クロックジェネレータを発表 [11:13 5/24] 開発・SE |
|
電通、オランダのソーシャルメディア・ベンチャー企業を買収 [11:12 5/24] エンタープライズ |