我在代码中使用STXXL库的stxxl :: vector为:
struct B
{
typedef stxxl::VECTOR_GENERATOR<float>::result vector;
vector content;
};
然后使用以下代码片段在循环中创建上述声明的Structure的许多实例:
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都花费特定数量的内部存储器,因为它基本上是用于外部存储器中块的分页系统。
使用默认设置时,每个stxxl :: vector为8(CachePages)* 4(PageSize)* 2 MiB(BlockSize)= 64 MiB RAM。
因此,您基本上用完了RAM。
关于c++ - 为什么使用“stxxl:Vector”作为其DataType之一创建指向超出“结构”的特定数量(30)的实例的指针失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30626239/