【发布时间】:2013-08-08 15:49:45
【问题描述】:
我目前有一个非常大的结构 >13MB(它必须保持这样,因为我没有指针)。我的问题是如何将它存储到一个类中。
如果它是课程的一部分,我会得到 stackoverflow。如果我使用指针,问题就解决了,直到我需要开始复制类......然后地狱开始了。 (因为类有很多成员)。
我尝试了 STL 向量和数组,但我仍然得到了 stackoverflow。是否有任何不将结构放入堆栈但直接分配内存的 STL 容器?
这样我就可以把所有事情都做好了。
谢谢。
更新:
示例代码:
//HEADER
#include <vector>
struct BigStruct { //This is untouchable or divisible into an array of arrays
char a[1000];
int b[1000][1000];
long c[1000000];
// etc...
};
class Foo
{
std::vector<BigStruct> a; //It has to be here since is related to this instance of the class
public:
Foo();
//All the other funcs and method
// ...
//All the other variables are from STL
// ...
};
//CPP
Foo::Foo(){
a.resize(1);
}
【问题讨论】:
-
std::vector 在堆上分配,你不应该得到堆栈溢出。
-
请记住,堆栈通常只有几 MB,因此如果将其声明为局部变量,那么您肯定会发生堆栈溢出。
-
如果它是 15mb,并且您将它用作普通类,您可以将其用作堆栈上的局部变量,并继续将它从一个地方复制到另一个地方......你有一个真正的设计问题。
-
您可能正在堆栈上创建此结构的临时实例,从而导致溢出。请提供您如何插入向量的代码。
-
vector<unique_ptr<T>>怎么样?你不需要有复制行为。
标签: c++ stl stack-overflow