回 帖 发 新 帖 刷新版面

主题:[讨论]虚拟内存问题

我的机器是1G内存的,用的编译器是CVF6.6
我在project->setting->link->output->reserve 设置为150,000,000
然后定义了几个605*605的数组,运行时显示insufficient vitual memory.
如果定义的是几个2205*2205的数组,则运行是提示cannnot allocate array-overflow on array size caculation.
但是定义几个405*405的数组时,运行是没有错误的。

然后,我在project->setting->link->output->reserve 设置为200,000,000
然后定义了几个405*405的数组,运行时显示insufficient vitual memory.

不理解为什么会产生上述问题,程序运行时,显然1G的内存都没使用完,为何还提示虚拟内存不足呢。
望高手解答,不胜感激!

回复列表 (共5个回复)

沙发


project-setting-link-reserve设置的是栈空间吧

板凳

超大数组建议还是用动态内存分配,否则你换台机器就有可能跑不动了:)

3 楼

[quote]超大数组建议还是用动态内存分配,否则你换台机器就有可能跑不动了:)[/quote]
但我设置的这些数组,明显才占用了一小部分内存啊?
还有这两个提示有什么区别?
1. insufficient vitual memory
2.cannnot allocate array-overflow on array size caculation.
如果程序在哪做得不好会出现这种情况呢?
谢谢大家的帮助!

4 楼

栈空间是有限制的,且栈空间不像堆,堆是可以一部分在虚存上的,栈则一般是禁止的。当内存无法分配连续空间给栈时就会出错。

内存与硬盘一样,都是有碎片存在的,堆可以不连续,但栈不行。

子程序/函数分配栈空间时,是所有数组及变量一并申请的。

根据以上说明故:
第一个错是:连续空间内存不足。
第二个错是:多个数组及变量所占内存已超出限值。

5 楼

[quote]栈空间是有限制的,且栈空间不像堆,堆是可以一部分在虚存上的,栈则一般是禁止的。当内存无法分配连续空间给栈时就会出错。

内存与硬盘一样,都是有碎片存在的,堆可以不连续,但栈不行。

子程序/函数分配栈空间时,是所有数组及变量一并申请的。

根据以上说明故:
第一个错是:连续空间内存不足。
第二个错是:多个数组及变量所占内存已超出限值。
[/quote]
真的很感谢你的回答,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册