ПрограммированиеФорумОбщее

Аллокатор в OGRE

#0
13:36, 29 мая 2010

Здравствуйте

зачем _условно_(я так понимаю что все они работают с одной и той же памятью - оперативной) делить аллокаторы на работу с разными категориями памяти?

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;

думаю для тех кто работал с ОГРом вопрос будет понятен...

#1
16:56, 29 мая 2010

http://www.flounder.com/memory_allocation.htm
И прочие результаты гугля по запросу "memory allocation strategy".
Так сделано, чтобы не было мучительно больно, если вдруг потребуется вписать кастомный аллокатор. Скажем, скрипту выдать N мегабайт и пусть в них сидит, а дальше не лезет.

#2
16:58, 29 мая 2010

Заняться людям нечем, вот и пишут аллокаторы разные.

#3
17:09, 29 мая 2010

Они их не пишут, они оставляют возможность втюхать кастомный аллокатор на заданные объекты. Не хочешь - юзается дефолтный.

ПрограммированиеФорумОбщее

Тема в архиве.