栈和堆最大可以申请的内存数

栈:一个栈对应一个线程

        有限制,VS2010中,默认的栈空间大小为1M(64位和32位系统),可通过CreatThread参数列表改变线程的StackSize;

        最大支持线程数 = 内存/StackSize

堆:与64位/32位有关,与编译器有关,受限于计算机系统中有效的虚拟内存;

       理论上,32位系统,堆内存可以达到4G的空间,但是堆最大也没有4G,因为整个进程的映像空间有一部分被映射给操作系统,另外栈也占据了一部分,全局,静态变量再占据一部分,还有其他代码数据占据一部分.

      操作系统中有记录空闲内存地址的链表,申请时,寻找第一个空间大于申请空间的堆

      VS2010 32位:2G

                     64位:128G(虚拟内存16TB)【C++ 64位下最多4G,C的malloc无限制】



另来自:http://bbs.csdn.net/topics/300107271

Win32在正常情况下,4G内存里有2G分配给用户进程,有2G给系统用.

用户进程的东西像堆,栈,CODE等等都是在2G用户空间里的.

用户可分配的内存总量一般有近2G,

但单独一个可分配的内存块的大小通常不可能达到这个数量级,系统会根据当前进程的地址使用情况来决定.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值