Воскресенье, 17 Ноября 2024, 11:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Динамическое выделение памяти.
BOOMДата: Суббота, 20 Марта 2010, 17:05 | Сообщение # 1
I am the creator of ADE
Сейчас нет на сайте
И так, моей задачей является создание класса, отвечающего за хранение неоднородных данных, делящихся на четыре вида.

О классе: Класс spm_memory должен обеспечивать сохранность переменных, которые будут идентифицироваться номером. Так же они делятся на четыре типа, сопоставимо с типами С++: boolean - bool, integer - int, real - double, string - char*. Так же класс должен обеспечивать установление флага: запрет перезаписи, замены идентификатора ячейки памяти, перезапись даты памяти, единичное и полное удаление ячеек, очистку ячейки, поиск по идентификатору.

Но при создании класса я затормозился, и сломал голову! Я в основе использую класс vector, но при использовании большого количество данных, класс сильно ТОРМОЗИТ. Использовал метод логической отборки, то есть какая переменная используется часто, то ей ставится флаг в параллельной перемоенной поиска, которая проверяется в начале алгоритма поиска. Пробовал метод отсеивания... Но при заполнении базы более чем на 1000, начинаются тормоза, пусть даже не значительные, но весомы в конечном результате.

Помогите примерчиком поиска по вектору и мапу для большого содержания значений. Кто поможет, тому плюс!


______________________________
Я вернулся, и это чудо.
______________________________


Сообщение отредактировал BOOM - Четверг, 01 Апреля 2010, 10:38
BOOMДата: Четверг, 01 Апреля 2010, 10:35 | Сообщение # 2
I am the creator of ADE
Сейчас нет на сайте
Тему можно закрыть, так как я решил эту задачу.

Я, решение такого рода, редкой задачи, опишу кратко:
1. Необходимо конкретно определится с типами. В данном случае предпочел два: real(double), string(AnsiString, char*).
2. Организовал отдельные классы с динамическим вариантом выделения памяти, причем без системы регистрации и фиксирования максимальной памяти. Для регистров (из всего 10 (5 на каждый системный тип)) я использовал структуру и систему цикла for для поиска. В принципе, оправданно тем, что всего цикл проходит максимально 5 раз.
3. Для стека я использовал вариант вектора. Так как этот класс сам по себе быстр для задачи такого рода.
4. Для переменной я использовал карту массива map. Идентифицируется переменная в данном случае 32 разрядным числом int. Эта мелочь позволила решить проблемы с большим количеством данных в одном массиве.
5. Создал структуру, которая объединила ссылки на три выше описанных класса. Сама структура является ячейкой памяти.
6. Создал класс, который тоже основывается на карту map. Этот класс выделяет очередную изолированную ячейку памяти для процедуры. Это, кстати, конкретно обеспечит защиту, в случае использования отдельного потока и последовательного обращения к памяти из потоков.



______________________________
Я вернулся, и это чудо.
______________________________


Сообщение отредактировал BOOM - Четверг, 01 Апреля 2010, 10:38
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг