У меня есть проблемы придумывают с хорошей стратегией для уменьшения выделения памяти для следующей задачи:распределение Уменьшения памяти C++
Я построение дерева. В начале у меня есть только корень, который содержит некоторые данные (список (std::vector
) индексов). Я разделяю две части, где часть индексов переходит к левому ребенку, а другая часть идет вправо. Я не знаю, сколько будет идти влево/вправо. Однажды, я закончил обработку корня, мне больше не нужно хранить индексы для него. На самом деле, меня интересуют только те, у кого есть листья. Кроме того, дополнительные данные могут быть добавлены в каждый раскол! Итак, если корень имеет 20 элементов, то после разделения левый может иметь 12 элементов и правый. 10.
В каждом узле я сохраняю std::vector
, который содержит эти индексы. Когда я добавляю элементы, I push_back()
элемент, который приводит ко многим выделениям памяти.
Что было бы хорошей стратегией для поддержания индексов?
Вопрос важен для формирования структуры данных SBVH.
Код:
struct Node {
std::vector<unsigned> indices_;
// ... some other stuff here
}
void partition(Node* node) {
Node* left = new Node();
Node* right = new Node();
float axis = findSplitPosition(node);
for(size_t i = 0; i < node->indices_.size(); ++i) {
if (index is strictly left on axis) {
left->indices_.push_back(node->indices_[i]);
} else if(index is strictly right on axis) {
right->indices_.push_back(node->indices_[i]);
} else {
// it intersects the axis -> add to left and right
left->indices_.push_back(node->indices_[i]);
right->indices_.push_back(node->indices_[i]);
}
}
// root indices no longer needed
node->indices_.clear();
}
код может объяснить более 1000 строк –
Как насчет 'std :: vector :: reserve()'? –
Arez вы уверены, что время распределения релевантно для общей производительности? Или вы обеспокоены потреблением памяти (целая программа, процесс), потому что дерево огромно? –