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

栈:一个栈对应一个线程

        有限制,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,

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyq_tc25/article/details/51548568
文章标签: 内存
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭