为什么要创建指向某个'结构'之外的特定数量(30)的实例的指针。与' stxxl:Vector'因为其中一个DataType失败了?

时间:2015-06-03 16:56:17

标签: c++ pointers vector stxxl

我在我的代码中使用STXXL Library的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
 }

但是这个片段不会创建新的&#39; newVect&#39;超过一定数量(在这种情况下为30)

然而,我尝试了同样的事情,只需更换&#34; stxxl:Vector&#34;与其他一些内存数据类型:

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

以上创建的结构即使对于&#34; 100000&#34;新实例:

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

每个系统资源保持不变。

请帮助我。

可以&#34; stxxl:迭代器&#34;在这里提供帮助还是作为替代方案?

做什么样的行为&#39; stxxl:vector&#39;在这种情况下?

更新

尝试从每次迭代中删除函数调用并将其完全放在循环之外但没有帮助。 示例代码:

#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;
}

1 个答案:

答案 0 :(得分:1)

每个stxxl :: vector花费了特定数量的内部内存,因为它基本上是外部内存中块的分页系统。

使用默认设置,这是8(CachePages)* 4(PageSize)* 2 MiB(BlockSize)=每个stxxl :: vector的64 MiB RAM。

所以,你基本上没用RAM了。