栈:一个栈对应一个线程
有限制,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,
但单独一个可分配的内存块的大小通常不可能达到这个数量级,系统会根据当前进程的地址使用情况来决定.