我在代码中使用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/

10-10 19:38