Я использую 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;
}
Каждый stxxl :: vector требует определенного объема внутренней памяти, так как это в основном система разбиения на страницы для блоков во внешней памяти.
При настройках по умолчанию это 8 (CachePages) * 4 (PageSize) * 2 МБ (BlockSize) = 64 МБ ОЗУ на stxxl :: vector.
Итак, у вас практически не хватает оперативной памяти.