0

Core Duo で Windows 7 を実行しています。私はしばらくの間 Codeblocks を使用してきましたが、これは GNU コンパイラーを使用していると思います。

私は、抽象クラスから継承する多くのコンポーネント クラスを持っています (または持つ予定です) Component。それぞれのコンポーネントの量が不確定な、不確定な量のコンポーネント タイプ用のメモリ プールを格納するシステムを確立するのに助けが必要です。議論のために後者が修正されているのかもしれませんが、絶対に必要なときにサイズを変更する方法を理解できます。

また、便利なことに、各コンポーネント タイプには、unsigned short0 から穴のない任意の ID ( ) があります。わーい!

それで、配列のサイズなどを追跡するための管理クラスがいくつかあると仮定すると、このようなものは機能しますか?

class Component {};

class FooComponent: public Component {};
class BarComponent: public Component {};
.
.
.

std::vector<Component*> pool_list;

// returns pointer to beginning of pool
Component* foo_pool = MethodToCreateComponentPool(/* Params */)
Component* bar_pool = MethodToCreateComponentPool(/* Params */)

pool_list.push_back(foo_pool);
pool_list.push_back(bar_pool);

多分sizeof(FooComponent)Paramsに入れます。

それから(私が本当に何をすべきかわからなくなり始めたところ)関数内でmalloc( START_COUNT * component_size)

このようにメモリを割り当てた経験はありません。私は簡単に次のようなものを設定できます

vector< vector<Component*>* >また
map<unsigned short, vector<Component*> >

しかし、それは(1つには醜い)連続したプールを提供しません。キャッシュフレンドリーが必要です:)

アイデア?パターン?イディオム?ヘルプ?

4

1 に答える 1

0

私はこれをどのように実装しているかに夢中になり、本当に必要なものを見失いました。これは基本的にこの投稿です。

ありがとう。

于 2011-08-20T14:54:40.113 に答える