アロケータコンテキストの使用


Core Foundation 内の各アロケータには コンテキスト(context) があります。コンテキストとは、オブジェクトのオペレーティング環境を定義する構造体で、通常は関数ポインタで構成されます。アロケータのコンテキストは、CFAllocatorContext 構造体によって定義されます。関数ポインタに加えて、構造体にはバージョン番号とユーザ定義データのフィールドが含まれています。


リスト 1 : CFAllocatorContext 構造体


typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    void * (*allocate)(CFIndex size, CFOptionFlags hint, void *info);
    void * (*reallocate)(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
    void (*deallocate)(void *ptr, void *info);
    CFIndex (*preferredSize)(CFIndex size, CFOptionFlags hint, void *info);
} CFAllocatorContext;



info フィールドには、アロケータ用に特別に定義されたデータが含まれます。たとえば、アロケータは info フィールドを使用して未処理の割り当てを追跡できます。


重要: 現在のリリースでは、version フィールドの値を 0 以外に設定しないでください。


アロケータコンテキスト (info フィールド) にユーザ定義データがある場合は、CFAllocatorGetContext 関数を使用してアロケータ用の CFAllocatorContext 構造体を取得します。次に、必要に応じてデータを評価または処理します。以下のコードは、この例です。


リスト 2 : アロケータコンテキストとユーザ定義データの取得


static int numOutstandingAllocations(CFAllocatorRef alloc) {
    CFAllocatorContext context;
    context.version = 0;
    CFAllocatorGetContext(alloc, &context);
    return (*(int *)(context.info));
}


その他の Core Foundation 関数は、アロケータコンテキストで定義されたメモリ関連の呼び出し関数を呼び出し、メモリブロックへの型なしポインタ (void *) を取得または返します。



前の章 次の章



目次
Xcode 10 の新機能

  • 序文
  • この文書の構成
    以下も見よ
  • アロケータ
  • 所有権ポリシー
  • 基礎
    命名規則
    作成規則
    取得規則
    インスタンス変数と渡すパラメータ
    所有権の例
  • Core Foundation オブジェクトの寿命管理
  • オブジェクト参照の保持
    オブジェクト参照の解放
    オブジェクト参照のコピー
    オブジェクト保持カウントの決定
  • Copy 関数
  • 浅いコピー
    深いコピー
  • バイト順
  • 作成関数でのアロケータの使用
  • アロケータコンテキストの使用
  • カスタムアロケータの作成
  • アロケータ呼び出し関数の実装
  • バイトスワップ
  • 整数のバイトスワップ
    浮動小数点値のバイトスワップ
  • 文書改訂履歴












  • トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)