求助, 帮忙解释下这两种写法的区别
- C/C++ code
#include<iostream>#include<algorithm>using namespace std;unsigned __int64 a[1000000]; //这里int main(){ int t, n, tmp; register int i; while(scanf("%d",&t)!=EOF) { while(t--) { i=0; scanf("%d", &n); for(i=0;i<n;i++) scanf("%I64u", &a[i]); sort(a, a+n); tmp = 0; for(i=0; i<n; i+=2) { if(a[i] != a[i+1]) { printf("%I64u", a[i]); tmp++; i--; if(tmp == 2) break; else printf(" "); } } cout <<endl; } } return 0;}这样程序可以正常运行,
但如果把unsigned __int64 a[1000000];放到main函数里面,
- C/C++ code
#include<iostream>#include<algorithm>using namespace std;int main(){ unsigned __int64 a[1000000]; int t, n, tmp; register int i; .........这样程序就不能运行,
请问这两种写法有什么却别
谢谢了.
[解决办法]
函数里面的局部变量,在栈上分配空间,很小,一般就几M。
如果局部变量占用空间太大,栈会爆掉,整个程序就挂了。
全局变量,在全局区分配空间,上G都可以。
[解决办法]
栈的大小限制和操作系统和编译器都有关系,一般一两M
unsigned __int64 a[1000000];
这个有8M
关于堆、栈、全局区:
http://blog.csdn.net/woshishei0527/archive/2009/01/01/3680696.aspx
http://blog.csdn.net/jamestaosh/archive/2009/09/02/4513188.aspx
http://blog.csdn.net/qiudw/archive/2009/02/26/3940663.aspx
[解决办法]
栈空间默认只有1m……
局部变量太太就会将它挤爆……
[解决办法]
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
unsigned __int64 a[1000000];
int t, n, tmp;
register int i;
.........
[解决办法]
局部变量分配的大小
[解决办法]
呵呵,局部变量在栈上分配
全局变量在数据存储区分配