声明大型 2D 数组怎么会让程序崩溃

How could declaring a large 2D array crash a program?

本文关键字:程序 崩溃 怎么会 数组 大型 2D 声明      更新时间:2023-10-16

Windows Embedded Compact 7.

从 USB 驱动器运行 16KB 应用程序。

主要我有函数 1() 和函数 2();

Function1() 运行并打印出一些信息就可以了。

然后程序死了。

返回到命令提示符(袖珍 cmd v 7.00)。

函数 2 在顶部包含一个声明。这是针对计算中使用的二维双精度数组,当时实际上被注释掉了。

function2()
{
    LARGE_INTEGER li;   
    double time[PRIORITY_LEVELS][ITERATIONS]; // 256 X 1000
    double difference[ITERATIONS - 1] = {0};

没有意义的部分:
我注释掉了 2d 数组的声明(删除它) - 程序将正确运行 function2() 的其余内容。

这里可能有什么问题,或者我什至如何发现?

我有 8GB 的内存。对于 256X1000 8 字节双精度来说,这应该绰绰有余,对吧?

任何帮助,不胜感激。

您正在尝试在堆栈上分配大约 2 MB 的空间,这会破坏它。 1MB 是堆栈的大致通常大小(在您的特定平台上实际上可能更少,我不知道具体细节),因此您不想在那里分配大型数组。相反,您应该堆分配数组,即:

double* time[PRIORITY_LEVELS];
for (int i = 0; i < PRIORITY_LEVELS; ++i)
{
    time[i] = new double[ITERATIONS];
}

这只会占用堆栈上 256 个指针的空间,即假设是 32 位进程,则为 1KB。

你有8GB的RAM这一事实是无关紧要的;你的进程只能寻址2GB(假设32位),每个线程只有大约1MB的堆栈空间。

你有

8GB的RAMS,但并非所有这些RAMS都会进入你的进程
矩阵太大,无法在堆栈上分配,请尝试在堆上分配。