首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

, 帮忙解释下这两种写法的区别

2012-03-09 
求助, 帮忙解释下这两种写法的区别C/C++ code#includeiostream#includealgorithmusing namespace std

求助, 帮忙解释下这两种写法的区别

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;
.........

[解决办法]
局部变量分配的大小
[解决办法]
呵呵,局部变量在栈上分配
全局变量在数据存储区分配

热点排行