最終更新日時:
が更新

履歴 編集

Singleton Pool

はじめに

singleton_pool.hpp はテンプレートクラス singleton_pool を提供している。 そのクラスはシングルトンオブジェクトとしての pool へのアクセスを提供している。 他のpool-ベースのインターフェースについての情報は、他の pool インタフェースを見よ。

梗概

template <typename Tag, unsigned RequestedSize,
    typename UserAllocator = default_user_allocator_new_delete>
struct singleton_pool
{
public:
    typedef Tag tag;
    typedef UserAllocator user_allocator;
    typedef typename pool<UserAllocator>::size_type size_type;
    typedef typename pool<UserAllocator>::difference_type difference_type;

    static const unsigned requested_size = RequestedSize;

private:
    static pool<size_type> p; // exposition only!

    singleton_pool();

public:
    static bool is_from(void * ptr);

    static void * malloc();
    static void * ordered_malloc();
    static void * ordered_malloc(size_type n);

    static void free(void * ptr);
    static void ordered_free(void * ptr);
    static void free(void * ptr, std::size_t n);
    static void ordered_free(void * ptr, size_type n);

    static bool release_memory();
    static bool purge_memory();
};

注意事項

静的関数によって参照されている、基底となっている pool p は、実際には次のように宣言されている。

-- main() の開始前および main() の終了後はただひとつのスレッドのみが走っているなら、スレッドセーフである。 singleton_pool のすべての静的関数は p へのアクセスを同期する。 -- 使用前に構築済みであることが保証されている。それゆえ、上の梗概での単純な静的オブジェクトは実際には不正な実装である。 これを保証する、実際の実装はもっと込み入ったものである。

別々の、基底となっている pool p実装に特定のものを含めて、テンプレートパラメーターの組み合わせ毎に存在することに注意せよ。

テンプレートパラメータ

Tag

テンプレートパラメータ Tag を区別することによって、別々の束縛されないシングルトンプールが存在できる。 一例として pool allocators は、2つの異なるアロケーター型が、同じ基底となっているシングルトンプールを共有することが決して起きないように、2つのタグを使用している。

実際にはTagsingleton_poolによって何かに使用されることはない。

RequestedSize

割り当てられるメモリーチャンクの要求サイズ。 これはコンストラクタパラメーターとして、基底となる pool に渡される。 0より大きいこと。

UserAllocator

基底となる pool が、システムからメモリーを割り当てるために使用するメソッドを定義する。 詳細は User Allocators を見よ。

意味

Symbol Table

Symbol Meaning
SingletonPool singleton_pool<Tag, RequestedSize, UserAllocator>
chunk value of type void *
n value of type size_type

Typedefs/Static Const Values

Expression Type/Value
SingletonPool::tag Tag
SingletonPool::user_allocator UserAllocator
SingletonPool::size_type pool<UserAllocator>::size_type
SingletonPool::difference_type pool<UserAllocator>::difference_type
SingletonPool::requested_size RequestedSize

Functions

戻り型 意味的同値
SingletonPool::is_from(chunk) bool SingletonPool::p.is_from(chunk); synchronized
SingletonPool::malloc() void * SingletonPool::p.malloc(); synchronized
SingletonPool::ordered_malloc(n) void * SingletonPool::p.ordered_malloc(n); synchronized
SingletonPool::free(chunk) void SingletonPool::p.free(chunk); synchronized
SingletonPool::ordered_free(chunk) void SingletonPool::p.ordered_free(chunk); synchronized
SingletonPool::free(chunk, n) void SingletonPool::p.free(chunk, n); synchronized
SingletonPool::ordered_free(chunk, n) void SingletonPool::p.ordered_free(chunk, n); synchronized
SingletonPool::release_memory() bool SingletonPool::p.release_memory(); synchronized
SingletonPool::purge_memory() bool SingletonPool::p.purge_memory(); synchronized

これらの関数についてより詳しい情報は、pool interface を見よ。

Symbols

  • boost::singleton_pool

Implementation Details


Copyright (c) 2000, 2001 Stephen Cleary (shammah@voyager.net)

This file can be redistributed and/or modified under the terms found in copyright.html

This software and its documentation is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.