我最近迁移到一台新笔记本电脑 - HP dv6119tx(英特尔酷睿 i5,4 GB RAM)。它安装了 Windows 7 Home Premium 64 位。
我正在尝试创建一个类型的数组int
长度为 10^6 的 C++ (Dev C++),我曾经在我的最后一台笔记本电脑(32 位 Windows 7 Ultimate/Ubuntu Linux,2GB RAM)和我编程过的所有其他环境(它应该需要大约 3.5 MB)上轻松地创建它内存)。但在当前设置下,我在调试模式下收到“分段错误”错误。
屏幕截图(编辑):
第一个屏幕截图显示 10^5 在当前设置下工作,而 10^6 则没有。我没有在我的上一台机器上运行 10^6 的屏幕截图,但我已经使用过它很多次了。
EDIT:
如果我将数组声明为global相反或在堆上动态创建它作为
int* a = new int[MAX];
但我不明白的是,当本地阵列在堆栈上占用了区区 3.5 MB 的内存(并且在 2 GB 机器上运行良好)时,为什么这个问题会在 4GB 机器上出现?这是用户堆栈空间问题吗?可以手动增加吗?
EDIT 2:
我特别问这个问题,因为我已经在 SPOJ 上提交了许多解决方案,其中在堆栈上创建了 10^6 大小的数组。以我目前的设置,我觉得无法做到这一点。只要有可能,我更喜欢堆栈而不是堆,因为它没有内存泄漏问题;局部变量优于全局变量,因为它们很整洁并且不会弄乱命名空间。
四兆字节的堆栈相当大。 Windows 上的默认大小为 1MB。您需要使用/STACK
链接器的选项要求更大的大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)