用于大尺寸的c ++堆栈分配

时间:2014-01-01 12:58:03

标签: c++ direct3d

我试图使用Direct3D 9加载大量原语,所以我需要将大量的struct传递给虚拟缓冲区。但是,如果我使用malloc()执行此操作,则sizeof()函数将返回错误的值(始终为4)。如果我通常分配堆栈内存(array[number]),堆栈可能因为元素数量而溢出。 有什么替代品吗?如何分配可以加载尽可能多的数据的堆栈内存?

P.S。我不会将它们全部绘制到屏幕上,但我仍然需要它们的顶点信息。

4 个答案:

答案 0 :(得分:1)

当与指针一起使用时,sizeof运算符返回指针的大小而不是它指向的大小。

当您动态分配内存时(在C ++中使用new而不是malloc),您需要自己跟踪条目数量。或者更好的是,使用例如std::vector

答案 1 :(得分:0)

malloc(),然后使用sizeof()会给你4.这是指针大小。

如果您只是想知道如何填写ptr中的值,请参考下面的代码:

int numOfItems = 10;
int* pArr = (malloc(sizeof(int)*numOfItems);
for (int i=0;i<numOfItems;i++)
    pArr[i] = i+1;

答案 2 :(得分:0)

如果您调用了malloc,则使用所需空间大小调用它。如果您想稍后知道分配的大小,您需要自己保留这些信息。

由于你使用C ++,你可以使用如果你调用了malloc,你可以用你想要的空间大小来调用它。如果您想稍后知道分配的大小,您需要自己保留这些信息。

如果这太麻烦了,因为你使用C ++,你可以使用<vector>或类似的,它将跟踪自己的大小。矢量或类似物,它将追踪自己的大小。

答案 3 :(得分:0)

您最好的选择可能是动态分配std :: vector并使用智能指针。

std::shared_ptr< std::vector< your data type> > vertices( new std::vector( number );

现在你不会溢出堆栈,所有相关的内务处理都是由std :: vector和std :: shared_ptr完成的,最重要的是内存将被删除。