• 4808阅读
  • 0回复

另一种方式理解[全局变量][风中纸页] [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
main()
{
double a[800][800];
a[0][0]=1.0;
printf("%f\n",a[0][0]);
system("pause");
}

Compiler : GCC
编译通过,运行时没能输出预期结果。(程序非法退出,Windows提示程序错误。)
把数组改小后,输出正常。

请问是什么原因?
是Windows下对命令提示符下的程序的内存使用有什么限制?
还是和编译模式有关啊?

=====================================
你的这个a数组应该是开在栈上的吧,如果开得太大,会栈溢出的。好像有什么开关可以修改栈的大小。

继续关注中……
--
Name:愤怒的葡萄
E-mail:svista_shao@163.com
MSN:svista_shao@hotmail.com
我可以负责任的告诉你:葡萄很愤怒,后果很严重。
============================
"Guest" <guest@guest.com> wrote in message
news:42397e0d_4@News.Newsfan.NET...
> main()
> {
> double a[800][800];
> a[0][0]=1.0;



"svista:愤怒的葡萄" <svista_shao@163.com> 写入邮件
news:423999f8_3@News.Newsfan.NET...
> 你的这个a数组应该是开在栈上的吧,如果开得太大,会栈溢出的。好像有什么开关
可以修改栈的大小。
>


====================================
我在Visual C++ 6.0 + SP6下测了一下,使用链接器的/heap参数
调整了栈的大小,但是依然非法操作。

我试了两种情况:/heap:0x1000000和/heap:0x1000000,0x1000000,
结果是一样。

=======================================
Hello, Julian!
不应该改heap的大小,而是stack的,比如/stack:0x600000 就能过了
VC默认栈大小为 1 MB,double[800][800]哪放的下

--
With best regards, Arthur Tu.


JZ> "svista:愤怒的葡萄" <svista_shao@163.com> 写入邮件
JZ> news:423999f8_3@News.Newsfan.NET...
>> 你的这个a数组应该是开在栈上的吧,如果开得太大,会栈溢出的。好像有什么开关
JZ> 可以修改栈的大小。


JZ> 我在Visual C++ 6.0 + SP6下测了一下,使用链接器的/heap参数
JZ> 调整了栈的大小,但是依然非法操作。

JZ> 我试了两种情况:/heap:0x1000000和/heap:0x1000000,0x1000000,
JZ> 结果是一样。


==========================================
首先谢谢各位的关注。
我在Linux组也发了一帖,那里有另一种说法,其回帖原文如下:
--------------------------------
栈的大小是有限制的,不能开得太大,要用大的空间的话,要么定义为全局变量,
要么
动态申请(比如new)。
--------------------------------
我把该数组改为全局变量试了一下,的确运行正常了。把数组加大到 double
[10000][10000] 也没问题。程序如下:

double a[10000][10000];
main()
{
a[0][0]=1.0;
printf("%f\n",a[0][0]);
system("pause");
}

在任务管理器中查看总的内存使用量是比程序运行前增加了730M,但在独立进程(该程
序的可执行文件,这里是test.exe)处看,只占用了1.4 M左右的内存,而且其它各个进
程也没有发现使用过这么大的内存,不知道那些内存被什么使用了?Windows的任务管
理器不是显示了所有进程的吗?

=======================================
1.关于730M内存:

sizeof( double ) * 10000 * 10000 ~= 730M;


2.关于为什么占用的是虚拟内存:

因为你只修改了这个大数组的一个单位,系统对于内存
访问有自己的优化方法,详见window2k内部揭秘与window系统编程.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个