Skip to content
/ FS Public

Flat Storage - Flat memory heap, with auto de fragmentation.

Notifications You must be signed in to change notification settings

USSRcoder/FS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FS

Flast Storage - Flat memory heap, with auto de fragmentation.

es.h - Simple memory storage, allow to allocate/deallocate blocks with varios size, 
and auto defragment it in memory.

radix.h - Radix index
es.cpp - test app, win msvc15,  SMFL+openGL; control keys: *-+0

Менеджер кучи, позволяющий добавлять/удалять блоки разной длинны, максимально 
де фрагментируя кучу при этом. 

Можно запрашивать любой номер для индекса шириной 32 бита. Индекс не обязан быть 
последовательным.


Алгоритм работы
Например, нужен блок с индексом 7678 и размером 600 байт. 
Делаю запрос к куче - куча мне его выдает, гарантируя при этом, что блок будет 
максимально приближен к началу кучи.
Таким образом достигается автоматическая дефрагментация кучи.

Состав
Для достижения целей используется "Массив стеков "свободных блоков" кучи." (std::priority_queue).
При огромном количестве частых вставок/удалений такой метод залагает.

Индексация
Для индексации применяется Radix Index; Индекс можно заменить на B-Tree или любой другой.

Rarix Index
Radix Index это - 65536 страниц по 65536 слов. Память выделяется кратно размеру странице;

При шаге индекса в 65535 (1,65536,131071,...) можно максимально записать 65535 елементов. 
(худший случай использования индекса. Индекс будет занимать 4GB);

При шаге индекса в 1 (1,2,3,...) индекс будет занимать максимально компактное 
пространство (лучший случай использования индекса);

Индекс для 1-65535 будет занимать 128кб, для 65536 - 131070 еще 128кб. 256кб всего;
Размер индекса ограничен свободной памятью в системе;
Вычисление индекса очень быстрое и лайтовое - 2 операции - битовый And + сдвиг;

Stream
Сама куча - непрерывный блок памяти, с динамическим увелечением.
Можно сохранить/загрузить кучу в файл, единым блоком за 1ну операцию mem_move.

Свойства
Index можно перестроить по куче, его можно не сохранять/загружать (draft, leaks).

TO DO
-resize выделенного блока.

es.cpp - Наглядный тест, MSvc15, SFML-2.3.2. Управление: numpad *-+79 [0] - Авто

About

Flat Storage - Flat memory heap, with auto de fragmentation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages