110gc -- DataScope Graphics Component

ライブラリリファレンス - gcObj

gcAppgcHeapをまず参照してください。


gcObjクラス

gcObjで始まる一連の関数群は、gcHeapクラスのラップ関数であり、 ヒープ中へのメモリ確保をより簡便に提供します。 gcHeapとgcObjとの関係について詳しくは gcHeapのリファレンスを参照してください。

gcObjクラスはまた、他のgcRgn、gcBitクラスなどの基底クラスとしての 役割も持っています。つまり、グラフィックスライブラリの他のクラスは、 gcObjの派生クラスとして定義されていると考えられます。

アプリケーションコンテキストの管理を行なうgcAppクラス、 メモリ管理を行なうgcHeapクラス、 そして、このgcObjクラスによる、オブジェクト管理の提供は、 グラフィックスライブラリというよりは、OSの機能の一部を提供しています。

gcObjは、次のように宣言されています。

typedef struct {
  gcObj_v* v; //予約、未使用
  void* d; //確保したメモリブロックのアドレス
} gcObj;
実際に割り当てられたメモリブロック、つまり、 オブジェクトのインスタンスデータのアドレスは、(gcObj*)->dで示されます。 この値は、gcHeapによって管理され、ヒープのコンパクト化に伴い、 変化することがあります。 また、このアドレスのうち上位31〜24ビットの内容は、 gcHeapクラスによって内部的に使用されていますので、 比較対象とする時は注意してください。


gcHeap* gcObjHeap(gcObj* obj);

メモリブロックのハンドル=オブジェクトへのポインタから、 そのハンドルがあるヒープを返します。 objが、gcObjLinkDataで確保されている場合でも、 そのハンドルのあるヒープを返します。

この関数、及び以下のgcObj関数群を実行する前に、使用しているヒープを、 gcHeapRegister関数で登録しておく必要があります。


gcObj* gcObjAlloc(long size, short mode);

デフォルトヒープからメモリ領域を確保し、そのハンドルを返します。 mode、戻り値はgcHeapAllocのそれと同様です。
【戻り値】0 ☆メモリ不足
その他正常

short gcObjRealloc(gcObj* obj, long size, short mode);

確保したメモリの大きさを変えます。 mode、戻り値はgcHeapReallocのそれと同様です。
【戻り値】-9 ☆内部エラー
-1 ☆メモリ不足
1正常、当該メモリの移動なし
2正常、当該メモリブロックは移動

void gcObjFree(gcObj* obj);

確保したメモリブロックとそのハンドルを開放します。 gcObjLinkDataで確保したハンドルも開放できます。


long gcObjSize(gcObj* obj);

確保してあるメモリのサイズを返します。


void gcObjCompact();

デフォルトヒープをコンパクト化します。


gcObj* gcObjLinkData(void* data, short mode);

ヒープ外のメモリブロックに対するハンドルを確保し、それを返します。 mode、戻り値はgcHeapLinkDataのそれと同様です。
【戻り値】0 ☆メモリ不足
その他正常

gcObj* gcObjDup(gcObj* obj, short mode);

指定したメモリブロックを複製してそのハンドルを返します。 このコピー元となるメモリブロックは、どのヒープにあるメモリブロックでも かまいません。但し、gcObjLinkDataで確保したものはだめです。
【戻り値】0 ☆メモリ不足
その他正常

void gcObjLock(gcObj* obj, short flag);

指定したメモリをロックし、gcHeapCompactとかで移動しないようにします。 flagはgcHeapLockのそれと同様です。