关于堆和栈的几个疑惑,该怎么处理

关于堆和栈的几个疑惑

  堆是应用程序在运行的时候请求操作系统分配给自己内存,由于从操作系统管理的

内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低.但是堆的优点

在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里

停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。事实上,面向对象的多

态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对

象之后才能确定.在C++中,要求创建一个对象时,只需用new命令编制相关的代码即

可。执行这些代码时,会在堆里自动进行数据的保存.当然,为达到这种灵活性,必

然会付出一定的代价:
 
    在堆里分配存储空间时会花掉更长的时间!

    所以可不可以理解为大量使用堆变量会降低程序运行效率   占用时间是主要是堆内存的分配时间和管理时间  
   
    还有一个问题栈内存有多大   ?堆内存有多大?
 
    有人说堆内存包括设备外存     比如256m+40G未使用的范围都是堆内存的范围
   


------解决方案--------------------
栈内存很小,好像只有1 MB?虽然是可以调的,但是不可能太大。
堆内存是要分配,是要占用时间,但是这个时间相对于应用程序更占空间的部分而言,微不足道。恐怖的是在堆的使用上发生问题,导致虚存机制不断起作用,这才占效率呢。
最后,32位平台下的堆内存的范围是 1KB ~ 4GB。这中间牵扯到一个虚拟内存的问题,如果Win32的内存本身不够了,就会将内存的数据转到硬盘上,而把所需的数据转到内存中。另外,由于系统本身要占有一定的内存,所以,你能得到的最大堆内存(Win32)只不过是2GB~3GB