110gc -- DataScope Graphics Component
ライブラリリファレンス - gcObj
gcApp、
gcHeapをまず参照してください。
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のそれと同様です。
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のそれと同様です。
gcObj* gcObjDup(gcObj* obj, short mode);
指定したメモリブロックを複製してそのハンドルを返します。
このコピー元となるメモリブロックは、どのヒープにあるメモリブロックでも
かまいません。但し、gcObjLinkDataで確保したものはだめです。
void gcObjLock(gcObj* obj, short flag);
指定したメモリをロックし、gcHeapCompactとかで移動しないようにします。
flagはgcHeapLockのそれと同様です。