Я использую Windows 7 с Core Duo.Я уже давно пользуюсь Codeblocks, и я думаю, что я использовал компилятор GNU.
У меня есть (или будет) много классов компонентов, которые наследуются от абстрактного класса Component
.Мне нужна помощь в создании системы для размещения пулов памяти для неопределенного количества типов компонентов, каждый из которых содержит неопределенное количество компонентов.Может быть, ради аргумента последнее исправлено, я могу выяснить, как изменить размер, когда это абсолютно необходимо.
Кроме того, удобно, чтобы каждый тип компонента имел идентификатор (unsigned short
) от 0 до любого без дырок.Ура!
Итак, при условии, что у меня есть некоторые управляющие классы для отслеживания размеров массивов и прочего, будет ли что-то вроде этой работы?
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*> >
, но это (безобразно для одного) не дает мне смежных пулов.Мне нужен кеш дружественный:)
Идеи?Узоры?Идиомы?Помощь