Почему создание указателя на экземпляры за определенным числом (30) для «Структуры» с «stxxl: Vector» в качестве одного из его DataType завершается ошибкой?

Я использую STXXL библиотеки stxxl :: vector в моем коде как:

struct B
{
typedef stxxl::VECTOR_GENERATOR<float>::result vector;
vector content;
};

А затем создаем много экземпляров объявленной выше структуры в цикле, используя следующий фрагмент кода:

 for(i=0;i<50;i++)
{
B* newVect= new B();
// Passing the above '*newVect' to some other function
}

Но этот фрагмент не будет создавать ‘newVect’ после определенного числа (30: в этом случае)

Однако я попытался сделать то же самое, просто заменив stxxl: Vector на другие типы данных In Memory:

struct B
{
float a,b,c;
int  f,g,h;
};

Выше созданная структура прекрасно работает даже для «100000» новых экземпляров, как:

for(i=0;i<100000;i++)
{
B* newVect= new B();
// Passing the above '*newVect' to some other function
}

с каждым системным ресурсом, остающимся тем же самым.

Пожалуйста, помогите мне с этим.

Может ли «stxxl: Iterators» помочь здесь или работать как альтернатива?

Какое поведение stxxl: vector имеет в этом случае?

ОБНОВИТЬ

Попытался удалить вызов функции из каждой итерации и вывести его за пределы цикла, но без помощи.
Пример кода:

#include <stxxl/vector>
#include <iostream>
using namespace std;

struct buff
{
typedef stxxl::VECTOR_GENERATOR<float>::result vector;

vector content;
};

struct par
{
buff* b[35];
};

void f(par *p)
{
for(int h=0;h<35;h++)
{
std::cout<<endl<<"In func: "<<(*p).b[h];
}
}

int main()
{
par parent;
for(int h=0;h<35;h++)
{
buff* b=new buff();

parent.b[h]=b;
cout<<endl<<"IN main: "<<parent.b[h];
}

cout << endl << endl;
f(&parent);

return 0;
}

0

Решение

Каждый stxxl :: vector требует определенного объема внутренней памяти, так как это в основном система разбиения на страницы для блоков во внешней памяти.

При настройках по умолчанию это 8 (CachePages) * 4 (PageSize) * 2 МБ (BlockSize) = 64 МБ ОЗУ на stxxl :: vector.

Итак, у вас практически не хватает оперативной памяти.

1

Другие решения


По вопросам рекламы [email protected]