堆 和 栈

-、内存区域划分

  1. 栈区(stack)

    1)程序运行时由编译器自动分配的一块连续的内容,存放函数的参数值,局部变量的值等

    2)程序结束时由编译器自动释放

    1. 栈由系统自动分配,程序员无法控制
  • 4)只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
    
    5)存取方式,先进后出
    
    1. 堆区(heap)

      1)在内存开辟另一块不连续的存储区域。一般由程序员分配释放,

      2)若程序员不释放,程序结束时由系统回收

      3)首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

    2. 静态存储区(static)

      编译器编译时分配内存。全局变量和静态变量的存储是放在一块的。

      将变量定义的类型前加static,则该变量存储在静态存储区

      static:

      1)只初始化一次
      2)只有程序退出才释放

    3. 常量区

      1. 常量占用内存,只读状态,决不可修改

      2)常量字符串就是放在这里的,程序结束后由系统释放

    4. 代码区

      所有的语句编译后会生成CPU指令存储在代码区.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 因为前段时间因为一些事情而晚上失眠多梦,身体素质直线下降,前天下班后去健身房减完身,感到恶心难受,后来发生了...
    Dely阅读 13,633评论 40 172
  • 在和计算机内存打交道时,我们一定会碰到堆和栈,这两个东西很容易搞混,那么现在就来梳理一下二者的关系。 栈(Stac...
    Albert陈凯阅读 2,368评论 0 6
  • 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就...
    木有鱼丸啦阅读 566评论 0 0
  • 作者:詹姆斯·乔伊斯 翻译:王志量 看楼人的女儿莉莉简直是双脚离地在飞跑了,她刚刚把一位先生带进底层营业所后面的...
    无名戒阅读 502评论 0 1
  • 忙碌的一天从五点开始,一天慢慢的课程也着实让我有些疲惫。不过忙碌不是那种瞎忙,所以感到充实也挺有意义。上午三个小时...
    老老明阅读 192评论 0 0