主题:请问下new最大可以开辟多大空间?
lynn9
[专家分:50] 发布于 2012-04-23 17:13:00
请问vc6.0软件里,用new最多可以开辟多大空间? 有人说是2G,可以更大吗,如何在vc6.0里设置更大空间?
请懂的大侠帮助回答下,急。
回复列表 (共5个回复)
沙发
eastcowboy [专家分:25370] 发布于 2012-04-25 20:21:00
这个是系统限制,跟new没什么关系。不用new,用其它的内存分配函数(比如malloc),也是一样有限制的。
VC6编译的程序,指针占4个字节,即32比特,因此理论上每个进程最多可以占用2的32次方个字节,也就是4G。一般操作系统会在这个理论的4G之中,划定一段作为系统使用(可能是当前已经使用,也可能是作为备用的预留地址段),剩下部分才是程序能够自由使用的。
另外,如果是单次分配,还要考虑空间的连续性。举例来说,如果0x40000000, 0x80000000, 0xC0000000这三个地址都已经被占用了,那么整个4G的内存空间就被分为四段,每段有1G。此时想分配一个1.2G的连续的空间,那就会失败。
板凳
ing999 [专家分:20] 发布于 2012-04-25 22:39:00
先顶上去再说www.kaixinbz168.com
3 楼
boxertony [专家分:23030] 发布于 2012-04-30 18:15:00
[quote]举例来说,如果0x40000000, 0x80000000, 0xC0000000这三个地址都已经被占用了,那么整个4G的内存空间就被分为四段,每段有1G。此时想分配一个1.2G的连续的空间,那就会失败。[/quote]
我觉得不一定会失败,因为操作系统会自动把一部分内存的东西保存到磁盘虚拟内存,以腾出空间。
4 楼
强强 [专家分:4740] 发布于 2012-04-30 21:04:00
我赞成牛仔的说法,虽然有虚拟内存但是32位CPU只支持4G地址空间,地址空间是没办法扩充的。再有内核会占用高2G地址空间,属于应用程序的地址空间只有2G。
5 楼
宝平22 [专家分:40] 发布于 2012-05-06 21:13:00
同上。这是系统分配的,大约是1G,
我来回复