关于堆栈的一些问题

我在CSDN 中的提问,高手的回答,解答了我许久的困惑,故记下来。

请问64位系统中
问题一,堆的大小是多少?堆的大小跟变量,如一个数组的大小有何关系?
问题二,假设物理内存为1G,则程序中可操作的内存是多少?,允许生成多大的变量呢,例如我想把一个2G大小的文件读入程序,会出错吗?
问题三,普通的生成的变量,跟用new生成的变量相比,后者有什么优势,或者说用new来控制内存分配的程序,有什么优点?

回答

64位不太熟悉,
但是在32位和64位应该没有本质的区别:
32位中,
1.堆的大小默认是1m,可以调整编译选择改变,堆的大小和变量和数组没有关系;
2.可以使用的是虚拟内存,程序员一般情况下没有办法直接操作物理内存,一般32位的操作系统,可以使用的内存在2g左右,
可以通过调整到3g,但是不能超过4g。
把一个2g的文件读入内存,不是什么好办法,建议使用文件内存映射。
3.普通的生成的变量,是在堆栈(就是栈吧)上的,new出来的变量是在堆上的。
后者的优点是比较灵活,可以由程序员控制,分配和回收。而且后者大小可以比较大。。。。。

原帖的地址是 http://topic.csdn.net/u/20080520/22/9381f4f5-0653-464c-a509-541c731b4953.html

原文地址:https://www.cnblogs.com/bioinfo/p/1204307.html