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

原创 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,

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

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

相关文章推荐

测试栈空间的大小

比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出?ulimit 命令linux下使用ulimit 命令可以查看系统的很多上限值。 ulimit -a 查看所有uli...

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

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

栈空间的最大值是多少

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

内存、栈、堆的一点小总结 《程序员的自我修养》·笔记

内存、栈、堆的一点小总结 程序的内存布局 【前言】在32位系统中,大家可能认为我们可以用一个32位的指针访问任意内存地址。如下: int *p = (int *)0x12345678; ++*p...

linux C语言 内存申请 堆 栈 大小限制

C语言申请内存时堆栈大小限制 一直都有一个疑问,一个进程可以使用多大的内存空间,swap交换空间以及物理内存的大小,ulimit的stack size对进程的内存使用有怎样的限制?今天特亲自动手实验了...

C语言申请内存时堆栈大小限制

一直都有一个疑问,一个进程可以使用多大的内存空间,swap交换空间以及物理内存的大小,ulimit的stack size对进程的内存使用有怎样的限制?今天特亲自动手实验了一次,总结如下: 开辟一...

堆和栈的区别

主要的区别由以下几点:     1、管理方式不同;     2、空间大小不同;     3、能否产生碎片不同;     4、生长方向...

申请内存的函数

C语言跟内存申请相关的函数主要有 _alloca,calloc,malloc,free,realloc等,都位于头文件malloc.h中(注意没有alloc函数)       其中_alloca是向栈...

堆内存和栈内存

堆:顺序随意  栈:先进后出  堆和栈的区别  一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数...

堆内存和栈内存

程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分 栈区(stack)—— 由编译器(操作系统)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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