我尝试在堆栈上创建一个 ~975KB 数组,但它崩溃了。
const int size = 500;
cout << (sizeof(float)*size*size)/1024 << endl;
float myArray[size*size]; // crash
这似乎是一个非常小的空间。在我初始化变量之前,有没有办法知道有多少可用空间(总空间和当前空间)?
我尝试在堆栈上创建一个 ~975KB 数组,但它崩溃了。
const int size = 500;
cout << (sizeof(float)*size*size)/1024 << endl;
float myArray[size*size]; // crash
这似乎是一个非常小的空间。在我初始化变量之前,有没有办法知道有多少可用空间(总空间和当前空间)?
堆栈在几乎所有系统中都是有限的。允许多大取决于操作系统/编译器组合。将非常大量的数据放在堆栈上是一个糟糕的主意。要么使用 C++ 标准类型(例如vector
),要么使用您自己的动态内存分配。您永远不知道其他函数何时会添加一些额外的堆栈,并且突然之间,您会超出限制-最好不要接近堆栈的最大大小。
Visual Studio 的默认堆栈大小是1MB
,正如 Andre 所说,您可以使用它std::vector
来避免这个问题,或者您可以动态分配内存。您可以使用 /F
. 如果没有令人信服的理由在堆栈上分配数据,那么使用另一个选项可能更有意义。
在 Visual C++ 中,默认堆栈大小由链接器选项/STACK
(doc)管理。默认情况下为 1 MB。
请注意,每个新线程都有自己的堆栈,您可以dwStackSize
在 function 中使用参数指定初始大小CreateThread
。如果它是 0,它将默认为链接器命令中使用的那个。
关于您的其他问题,无法查询当前/最大堆栈大小。为避免出现问题,最好将堆用于任何重要的内存分配。