• 堆、栈、静态存储区


    1.内存的基本构成

    堆:由程序员自己分配释放(用malloc和free,或new和delete) ,如果我们不手动释放,那就要到程序结束才释放。如果对分配的空间在不用的时候不释放而一味的分配,那么可能会引起内存泄漏,其容量取决于虚拟内存,较大。在VS2010的默认情况下,32位程序可以申请的堆大小最大是2G。而64位程序,如果没有虚拟内存(硬盘)的支持,则可以使用128G的内存。而如果你把虚拟内存开启,则可以理论上得到16TB的内存使用大小。

    栈:由编译器自动分配释放,其中存放在主调函数中被调函数的代码、函数参数和局部变量,容量有限,较小。默认情况下,visual studio 2010 的栈大小为1M。

    静态存储区:由在编译时由编译器分配,由系统释放,其中存放的是全局变量、static变量和常量.默认情况下,VS2010可容纳的全局变量数组大小是2G。

    2.区别

    1. 堆是由低地址向高地址扩展,栈是由高地址向低地址扩展。
    2. 堆是不连续的空间,栈是连续的空间。
    3. 在申请空间后,栈的分配要比堆的快。对于堆,先遍历存放空闲存储地址的链表、修改链表、再进行分配;对于栈,只要剩下的可用空间足够,就可分配到,如果不够,那么就会报告栈溢出。
    4.  栈的生命期最短,到函数调用结束时;静态存储区的生命期最长,到程序结束时;堆中的生命期是到被我们手动释放时(如果整个过程中都不手动释放,那就到程序结束时)。

  • 相关阅读:
    【JDK源码】从源码看公平锁和非公平锁得区别
    【spring源码解读】spring加载流程refresh之prepareBeanFactory(beanFactory)
    【JDK源码】Synchronized关键字原理,和锁的膨胀过程
    【Spring源码解读】BeanPostProcessor 接口解读
    【spring源码】spring的循环依赖
    JS-04 JS中的函数都是按值传递的
    CSS-03 queue方法
    CSS-02 BFC的理解
    CSS-01 CSS代码标准和规范
    JS-03 牛客网练习
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/16381470.html
Copyright © 2020-2023  润新知