数组初始化时,予许分配多大空间?解决思路
数组初始化时,予许分配多大空间?为什么用数组分配,编译器报告:**.exe中的 0x00db1b37 处有未经处理的异常:
数组初始化时,予许分配多大空间?
为什么用数组分配,编译器报告:**.exe中的 0x00db1b37 处有未经处理的异常: 0xC00000FD: Stack overflow
而用动态malloc分配空间,则可以正常运行。
是因为程序编译与运行时为数据分配空间的地方不一样吗?(代码如下)
#define N 100000
int s[N] = {0};
----------------------------
#define N 100000
int * p;
*p = (int *)malloc(N * sizeof(int));
-------------------------------
(代码测试驱体就不贴了)
请大家不吝赐教,谢谢!
[解决办法]
具体有多大,我也不知道,没测试过!不过有一点是肯定的一般是都够用的!
[解决办法]
孩子,上面的数组s[N]分配的是栈空间,下面malloc的是堆空间...好好看看内存分配的书吧
[解决办法]
栈内存最大1024m
[解决办法]
[解决办法]如果是在linux下,可以使用ulimit -s查看堆栈空间大小是8192kb,但实际可分配没有这么大,根据你写的程序代码大小编译后有点关系,就是教科书上讲的代码段之类的。
当然手勤的话自己可以测试一下。
不过有必要分配这么大的数组吗?
[解决办法]简单地说,程序员使用的内存空间分为堆和栈,你用malloc申请的内存空间属于堆,大小基本不受限制,而你所使用的其他变量所占的空间程序运行时放在栈里,栈的大小一般不超过几M
如果需要使用的内存较小,比如大小不过百的数组,就直接定义,这样程序运行时它放在栈里面,速度快
如果需要使用的内存较大,比如你想要的数组,就必须用malloc申请,因为栈大小有限,而且它是程序运行的基本需求,你跟程序基本需求抢地方,无论抢得过还是抢不过,最终都是想让程序正常运行的你倒霉