C++ 中针对大型的堆栈分配
Stack allocation in c++ for large sizes
我正在尝试使用 Direct3D 9 加载大量基元,因此我需要将大量结构数组传递给虚拟缓冲区。但是如果我用 malloc()
来做,我的 sizeof()
函数返回一个错误的值(总是 4)。如果我通常分配堆栈内存(array[number]
),堆栈可能会因为元素数量而溢出。还有其他选择吗?如何分配可以加载尽可能多的数据的堆栈内存?
附言我不会将它们全部绘制到屏幕上,但我仍然需要它们的顶点信息。
当与指针一起使用时,sizeof
运算符返回指针的大小,而不是它指向的内容。
当您动态分配内存时(C++使用 new
而不是 malloc
),您需要自己跟踪条目的数量。或者更好的是,使用例如 std::vector
.
如果您调用 malloc,则使用所需的空间大小调用它。如果你以后想知道分配有多大,你需要把这些信息放在自己身边。
由于您使用C++,因此您可以使用如果您调用 malloc,则使用所需的空间大小来调用它。如果你以后想知道分配有多大,你需要把这些信息放在自己身边。
如果这太麻烦了,因为你的使用C++,你可以使用一个<vector>
或类似的,它会跟踪它自己的大小。 一个矢量或类似的东西,它将跟踪它自己的大小。
是的,
malloc()
然后使用 sizeof()
会给你 4。这就是指针大小。
如果您只是想知道如何在 ptr 中填写您的值,请参考下面的代码:
int numOfItems = 10; int* pArr = (malloc(sizeof(int)*numOfItems); for (int i=0;i<numOfItems;i++) pArr[i] = i+1;
最好的选择可能是动态分配 std::vector 并使用智能指针。
std::shared_ptr< std::vector< your data type> > vertices( new std::vector( number );
现在你不会溢出堆栈,所有相关的内务处理都是由 std::vector 和 std::shared_ptr 完成的,最重要的是内存将被删除。
相关文章:
- 从堆栈分配的原始指针构造智能指针
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- C++析构函数调用两次,堆栈分配的复合对象
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 何时在函数中声明堆栈分配变量?
- 使用 std::map 的递归堆栈分配如何工作?
- tcmalloc 与纯堆栈分配性能有多接近
- 安全分配堆栈分配的阵列
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 跟踪(堆栈分配)对象
- 堆栈分配的确切时间
- 未初始化的值是由堆栈分配 - Qt - C++创建的
- 用于堆栈分配对象的C++虚拟析构函数内联
- C STD :: BAD_ALLOC来自堆栈分配
- 是使用COM创建的对象,将采用分配或堆栈分配的内存
- C++ 中针对大型的堆栈分配
- 堆栈分配的向量如何在 C++ 中扩展