2015-10-19 1 views
0

C++.Можно ли выделить больше памяти, чем нужно для массива, когда вы не знаете точное количество элементов, но можете оценить верхнюю границу?

Я хочу создать массив и сохранить в нем элементы. И я могу оценить верхнюю границу для количества элементов, что было бы правдой для большинства случаев, скажем, около 98% случаев. Лучше ли с точки зрения скорости и красоты создавать статический массив с размером, равным верхней границе, вместо динамического распределения? Чтобы быть более конкретным, скажем, что количество элементов колеблется от 10000 до 60000 и 2 байта на элемент. И в очень редких случаях эта сумма может быть выше 60000 (в таком случае мне придется перераспределить).

Можно ли статически выделять массив размером 60000 и использовать его часть, а в некоторых случаях перераспределять до большего размера, или эта практика слишком уродлива?

+3

Почему не 'станд :: VECTOR'? – crashmstr

+0

Скорость и красота - разные цели. Динамическое распределение является более изящным, но статическое распределение (со случайным перераспределением) * может * быть быстрее (вы должны проверить, чтобы убедиться). – Beta

ответ

3

Просто используйте std::vector, который позволяет изменять размеры по мере необходимости и зарезервировать оценочный максимальный размер для повышения производительности. Вы даже можете сделать это static/global, если хотите, но тогда у вас есть обычные проблемы с глобальными переменными.

Если вы не создаете новые экземпляры вектора очень часто, что я сомневаюсь, с таким большим размером, то это должно иметь хорошие показатели.

+0

Спасибо за совет, я не очень expirieced в STL, похоже, что мне нужно. –

1

Шаблон std::vector сделан точно решать такие проблемы. Он автоматически выделяет новую память для новых элементов, обеспечивая эффективное использование памяти и предотвращая дорогостоящие операции времени, такие как перераспределение.