Есть ли разница в том, как g ++ обрабатывает эту ситуацию из-за различий в коде?Новичку кажется, что это точно такой же код.
Я должен упомянуть, что оба дерева имеют огромный размер, каждое из которых содержит около десяти или около того тензоров, причем каждое число элементов оценивается в 10 ^ 5 или около того целых чисел.,
РЕДАКТИРОВАТЬ: Все числа выделены для кучи, с одним только указателем от корня дерева, фактически лежащим в стеке.
{
std::cout << "\nTrial #" << i << std::endl;
v = createV(10, 5, 10);
ExTree<int> treeOpt = build_opt(v);
{
//...
treeOpt.evaluate();
}
ExTree<int> treeNai = build_naive(v);
{
//...
treeNai.evaluate();
}
}
и
{
std::cout << "\nTrial #" << i << std::endl;
v = createV(10, 5, 10);
ExTree<int> treeNai = build_naive(v);
ExTree<int> treeOpt = build_opt(v);
{
//...
treeOpt.evaluate();
}
{
//...
treeNai.evaluate();
}
}
Я спрашиваю об этом, потому что это, кажется, действительно имеет значение, и я хотел бы знать, почему?Или, если быть более точным, понимает ли компилятор, что treeOpt больше не будет использоваться после вычисления и освобождается в память?Второй фрагмент кода вызывает то, что std::bad_alloc
происходит чаще.