Мне нужно сделать объект, который владеет списками, которые могут расти бесконечно. Элементы в списке являются структурами, составленными из основных типов.
Итак, я хочу знать, может ли использование вектора для него привести к фрагментации памяти, если он растет слишком сильно. Если так, что я должен использовать вместо этого?
Будет ли достаточно указателя на вектор? Я не знаю, будет ли фрагментация памяти менее важной, если вектор будет храниться вне объекта.
Из комментариев:
В самом большом тестовом примере, который у меня есть, материнский объект с самым большим списком имеет 10000 элементов. Однако в этом случае имеется 23000 материнских объектов. Таким образом, мы могли бы говорить о 230 000 000 «базовых структурах» как максимальных, учитывая, что случаев не больше, чем это.
Используйте векторы.
Вы не должны беспокоиться о фрагментации памяти, когда самый большой непрерывный массив памяти, который вам нужен, содержит около 10000 элементов (скажем, 30 байтов на элемент, что означает 300 КБ). Современные модели памяти достаточно эффективны, они могут обрабатывать несколько килобайт непрерывной памяти. Если вы хотите узнать больше о фрагментации памяти, вот вопрос по этому поводу.
Тот факт, что у вас может быть много «материнских объектов», не имеет значения, так как они не требуют смешения в памяти.
Вы также можете прочитать о deques, если вы хотите копать немного глубже.
Это не должно иметь большого значения, если последовательность не очень большая, но векторы используют непрерывную память, поэтому они не приводят к фрагментации, тогда как если вы сделаете это со списком, он будет просить место в разных частях память, ведьма может в конечном итоге привести к фрагментации.