Лучший способ хранения очень большого количества объектов в памяти? - PullRequest
1 голос
/ 23 сентября 2009

Очень простой вопрос, каким был бы ваш способ хранения 100 КБ - 2 МБ объектов в памяти? Объект состоит из 3-х двойных и двух струнных (как правило, длиной до 5 символов). Было бы лучше использовать struct вместо class?

РЕДАКТИРОВАТЬ: я не знаю, почему я сказал двойной, это плавать ..: S

Ответы [ 4 ]

3 голосов
/ 23 сентября 2009

При работе с большим количеством объектов необходимо учитывать две основные проблемы.

Первый вопрос был рассмотрен в ответе Фредерика Гейселя с использованием шаблона веса лету, который является проблемой памяти.

Вторая проблема заключается в том, как эффективно добавлять и извлекать эти объекты / структуры (в зависимости от того, какой путь вы выбрали). Очевидно, я предполагаю, что вы не просто создаете эти объекты и никогда не хотите их снова получать;)

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

2 голосов
/ 23 сентября 2009

Есть ли шанс использовать шаблон Flyweight ?

Вы можете использовать структуру, если ваш тип представляет тип значения. Структуры дешевле выделить и освободить. Учитывая рекомендации по проектированию, вы можете использовать структуру, если:

  • тип имеет размер экземпляра менее 16 байт.
  • экземпляры недолговечны
  • экземпляры являются неизменяемыми (что все значения значения должны быть imho).
1 голос
/ 23 сентября 2009

Я не знаю много о том, что вы делаете, но как насчет этих эмпирических правил?

Если вам нужно хранить точки в некоторой коллекции, то сделайте их классами, чтобы сохранить накладные расходы на хранение структур бокса.

Если вы просто используете точки в качестве входных данных для другого объекта для обработки, например, в качестве точек в сетке для обработки, затем предпочитайте массив для сохранения накладных расходов класса Collection.

Если вы сохраняете точки в массиве, просто сделайте их структурами, поскольку это более эффективно, чем сделать их классами.

0 голосов
/ 23 сентября 2009

Я сомневаюсь, что есть разница между структурой и классом, конечно, не в C ++, где они, по сути, одно и то же. 2M объекты, размер которых вы предлагаете, невелики в современной настольной системе.

...