2006年02月11日

Tクラス

Series60でのデフォルトのスタックサイズは8KBです。大きなオブジェクトをスタック上に積むのは危険な行為になります。従って、これから利用するクラスのサイズを大まかでも知っておく必要があります。そこで、出てくるのがTクラスになります。Tクラスはスタックに積んでも安全な比較的小さなサイズで、大きさは概ね256bytes以下を目安にします。

 クラス自体の大きさ以外にも、他のオブジェクトを所有しない(つまりhas-aポインタを持たない)クラスである制約があります。これは、携帯などの組み込み環境は「メモリの確保が最もリソース不足によるエラーを起こしやすい」ためです。また、他のオブジェクトを所有しないので、デストラクタが不要になります。

 int型などの組み込みのデータ型は、Tが頭につくようにtypedefされています。以下に、簡単に組み込みのデータ型について触れていきますが、文字列の扱いが特殊であることに注意してください。

基本データ型

 基本データ型はデータサイズが小さいので先頭に「T」が付く型名が使われています。下記のようにtypedefされています。こちらはこれ以上の解説は不要かと思います。

typedef signed int TInt;
typedef unsigned int TUint;
typedef signed char TInt8;
typedef unsigned char TU in t8 ;
typedef short int TInt16;
typedef unsigned short int TUin t16;
typedef long int TInt32;
typedef unsigned lon g int TUin t32;

文字列

 文字列は、char型のポインタを使用しません。基本的に、文字コードがUnicodeになるためです。そこで、char型のポインタを使用するその代わりに「_L」マクロや「_LIT」マクロなどを使用します。ここでは例として「_LIT」マクロの使用方法を次に示します。

_LIT(KHelloWorld, "Hello World!");

 この場合、KhelloWorldが文字列を表す変数(TlitCの型)になり、宣言と初期化が行われます。変数が必要ない場合、例えば引数にそのまま渡したい場合は_Lマクロを使用します。以降のサンプルで_Lマクロを使用したものが出てきますので、そちらのコードも合わせて確認してみてください。

補足:LITマクロに比べて_Lマクロの方は若干効率が悪くなっております。基本的には_LITマクロを使用するほうが良いかと思います。

浮動小数点

 浮動小数点を表す型にはTFloatやTRealなどの型があります。

typedef float TReal32;
typedef double TReal;

 ただしこれらの型に関しては注意が必要です。組み込み環境のアーキテクチャでは、基本的には浮動小数点のサポートを行いません。浮動小数点を含む計算はハードウェアではなく、ソフトウェアで実行する形になります。つまり、浮動小数点の計算が整数の計算などとは異なり非常に時間がかかることになります。

 実際、弊社で作成している組み込み環境向けの3DグラフィックスエンジンであるMascotCapsule(*1)では、小数を表す必要がある場合、高速に動作させる必要性から浮動小数点ではなく(勝手にある桁に小数点があるものと仮定した)、固定小数点を採用しています。

 このようなことから、浮動小数点を含む計算は極力回避するというのが原則になると思います。

posted by シンビアン at 08:23| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/13123308

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。