• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-05-04)  系统原理 |   3 条评论  44 
    文章评分 0 次,平均分 0.0

    看过操作系统原理的同学都比较了解内存布局与分配,那就不得不说BSS,堆,栈,静态区,代码段等等。

    但是他们的大小限制你了解吗?以下的说明都可以定义数组来测试下。

    栈(stack)

    栈大小与编译器有关。

    默认情况下,visual studio 2010 的栈大小为1M。但在平时应用程序中,由于函数会使用栈结果,所以只能用略小于1M大小的栈。
    对于64位和32位程序,结果都是一样的,因为VS2010已经设定好了默认的栈大小了。

    静态存储区(全局变量)

    对于全局变量来说,与编译器有关(不保证正确)

    默认情况下,VS2010可容纳的全局变量数组大小是2G。由于程序本身的应用,所以只能使用小于2G大小。

    堆(Heap)

    对于Heap来说,与程序是32位还是64位,以及编译器都有关。

    在VS2010的默认情况下,32位程序可以申请的堆大小最大是2G。实际上只能小于2G。
    而64位程序,如果没有虚拟内存(硬盘)的支持,则可以使用128G的内存(比如说,你有8G内存,就可以使用8G内存)。而如果你把虚拟内存开启,则可以理论上得到16TB的内存使用大小.

    总结

    总结一下,在默认情况下,栈只能得到1M大小的内存,全局静态储存可以得到2G,而在32位和64位下的堆则可以得到2G和无限内存(一般不会用到16T)。
    Reference:

    [1]. CSDN上的参考:http://topic.csdn.net/u/20090827/02/2b270cfd-acf4-41bb-8654-475a88ee7704.html
    [2]. 64位与32位的一些区别 http://bbs02.ly.shangdu.com/dispbbs.asp?boardid=22&Id=172330 4
    [3]. malloc与new的区别: http://group.gimoo.net/review/12921

     

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/1028.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享