声明大型 2D 数组怎么会让程序崩溃
How could declaring a large 2D array crash a program?
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都会进入你的进程
矩阵太大,无法在堆栈上分配,请尝试在堆上分配。
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃