回 帖 发 新 帖 刷新版面

主题:请问下new最大可以开辟多大空间?

请问vc6.0软件里,用new最多可以开辟多大空间? 有人说是2G,可以更大吗,如何在vc6.0里设置更大空间?
请懂的大侠帮助回答下,急。

回复列表 (共5个回复)

沙发

这个是系统限制,跟new没什么关系。不用new,用其它的内存分配函数(比如malloc),也是一样有限制的。
VC6编译的程序,指针占4个字节,即32比特,因此理论上每个进程最多可以占用2的32次方个字节,也就是4G。一般操作系统会在这个理论的4G之中,划定一段作为系统使用(可能是当前已经使用,也可能是作为备用的预留地址段),剩下部分才是程序能够自由使用的。
另外,如果是单次分配,还要考虑空间的连续性。举例来说,如果0x40000000, 0x80000000, 0xC0000000这三个地址都已经被占用了,那么整个4G的内存空间就被分为四段,每段有1G。此时想分配一个1.2G的连续的空间,那就会失败。

板凳

先顶上去再说www.kaixinbz168.com

3 楼

[quote]举例来说,如果0x40000000, 0x80000000, 0xC0000000这三个地址都已经被占用了,那么整个4G的内存空间就被分为四段,每段有1G。此时想分配一个1.2G的连续的空间,那就会失败。[/quote]
我觉得不一定会失败,因为操作系统会自动把一部分内存的东西保存到磁盘虚拟内存,以腾出空间。

4 楼

我赞成牛仔的说法,虽然有虚拟内存但是32位CPU只支持4G地址空间,地址空间是没办法扩充的。再有内核会占用高2G地址空间,属于应用程序的地址空间只有2G。

5 楼

同上。这是系统分配的,大约是1G,

我来回复

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