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

原创 2016年05月31日 19:55:53

栈:一个栈对应一个线程

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

栈空间的最大值是多少

在windows下,栈地址是向低地址扩展的数据结构,是一块连续的内存区域。栈顶的地址和栈的最大容量是系统预先规定好的,在windows下,栈的大小是2MB,而申请堆空间的大小一般小于2GB 由于内存...

堆空间和栈空间的大小

向原创致敬   http://www.findfunaax.com/notes/file/141  我们知道,程序运行时在内存中主要有代码段、数据段、堆栈段...

关于栈、堆、静态存储区最大可分配大小的探讨

看《编程之美》的第2.5节中有这么一小段程序: float array[100 000 000]; 这个1亿个float变量,这样就有8亿个字节,转化为二进制单位G,就是小于等于1G。这样大小的数...

堆的最大申请数量——我能malloc多少?

malloc最大申请数量

面试题——栈的最大值问题

常数时间求栈的最大值 问题描述: 一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。 设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。 可以修改栈的...

linux下进程的进程最大数、最大线程数、进程打开的文件数和ulimit命令修改硬件资源限制

linux系统中ulimit查看和更改系统限制ulimitulimit用于shell启动进程所占用的资源,可以用来设置系统的限制语法格式 ulimit [-acdfHlmnpsStvw] [siz...
  • gatieme
  • gatieme
  • 2016年04月04日 22:57
  • 12525

linux 下用户栈最大值

用户栈最大值大默认8M ,可通过ulimit 查看和修改 查看: ulimit -a  linux中,栈的最大值没有存储在可执行程序中。 为了证明Linux中进程的栈最大值是否存储在...

【C++】修改VS2013的默认堆栈大小

在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分: 1、栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等。在Windows下,...

32位模式下C/C++程序可用最大内存

关于32位程序申请大内存问题(1.6G). 我在win7 64系统上面测试 Visual studio 10 int* Test=new int[1024*1024*200]; int* T...

栈(stack)上申请内存大小限制问题

#include using namespace std; long int count = 0; void stack() { char msg[1024]; cout
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈和堆最大可以申请的内存数
举报原因:
原因补充:

(最多只允许输入30个字)