Здравствуйте
зачем _условно_(я так понимаю что все они работают с одной и той же памятью - оперативной) делить аллокаторы на работу с разными категориями памяти?
enum MemoryCategory { MEMCATEGORY_GENERAL = 0, MEMCATEGORY_GEOMETRY = 1, MEMCATEGORY_ANIMATION = 2, MEMCATEGORY_SCENE_CONTROL = 3, MEMCATEGORY_SCENE_OBJECTS = 4, MEMCATEGORY_RESOURCE = 5, MEMCATEGORY_SCRIPTING = 6, MEMCATEGORY_RENDERSYS = 7, MEMCATEGORY_COUNT = 8 };
тут создается пустой класс для отделения категорий памяти:
template <MemoryCategory Cat> class CategorisedAllocPolicy : public StdAllocPolicy // StdAllocPolicy - класс аллокатор {};
но а тут уже разделены по основным категориям:
typedef CategorisedAllocPolicy<MEMCATEGORY_GENERAL> GeneralAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_GEOMETRY> GeometryAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_ANIMATION> AnimationAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_SCENE_CONTROL> SceneCtlAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_SCENE_OBJECTS> SceneObjAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_RESOURCE> ResourceAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_SCRIPTING> ScriptingAllocPolicy; typedef CategorisedAllocPolicy<MEMCATEGORY_RENDERSYS> RenderSysAllocPolicy; // AllocatedObject - аллокатор typedef AllocatedObject<GeneralAllocPolicy> GeneralAllocatedObject; typedef AllocatedObject<GeometryAllocPolicy> GeometryAllocatedObject; typedef AllocatedObject<AnimationAllocPolicy> AnimationAllocatedObject; typedef AllocatedObject<SceneCtlAllocPolicy> SceneCtlAllocatedObject; typedef AllocatedObject<SceneObjAllocPolicy> SceneObjAllocatedObject; typedef AllocatedObject<ResourceAllocPolicy> ResourceAllocatedObject; typedef AllocatedObject<ScriptingAllocPolicy> ScriptingAllocatedObject; typedef AllocatedObject<RenderSysAllocPolicy> RenderSysAllocatedObject;
думаю для тех кто работал с ОГРом вопрос будет понятен...
http://www.flounder.com/memory_allocation.htm
И прочие результаты гугля по запросу "memory allocation strategy".
Так сделано, чтобы не было мучительно больно, если вдруг потребуется вписать кастомный аллокатор. Скажем, скрипту выдать N мегабайт и пусть в них сидит, а дальше не лезет.
Заняться людям нечем, вот и пишут аллокаторы разные.
Они их не пишут, они оставляют возможность втюхать кастомный аллокатор на заданные объекты. Не хочешь - юзается дефолтный.
Тема в архиве.