为什么使用 'stxxl:Vector' 作为其数据类型之一创建指向超过 'Structure' 的特定数量 (30) 的实例的指针失败?
Why do creating pointer to instances beyond certain number(30) of a 'Structure' with 'stxxl:Vector' as one of its DataType fails?
我在我的代码中使用 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" 替换为其他一些内存数据类型来尝试同样的事情:
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 MiB (BlockSize) = 64 MiB RAM 每个 stxxl::vector。
所以,您基本上 运行 内存不足。
我在我的代码中使用 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" 替换为其他一些内存数据类型来尝试同样的事情:
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 MiB (BlockSize) = 64 MiB RAM 每个 stxxl::vector。
所以,您基本上 运行 内存不足。