zoukankan      html  css  js  c++  java
  • 堆/栈 内存管理相关

    栈区由系统自动分配,自动在栈区申请内存,在存储上是连续的,如果我们在visual studio去查看栈区空间,debug模式下编译器会做一些处理,在分配之间留一些空间,但是实际分配上它是连续存储的,是从高地址向低地址扩展的数据结构,在这种情况下,栈顶的地址和他的最大容量,是固定的,一般来说大概就2m或者1m。

    之所以叫栈也是因为这个原因,就是在一个作用域里,比如说左括号,开始分配内存,当遇到右大括号,把分配的内存再统统销毁掉,这就是先进后出的一个栈结构。

    比如我们申请一个局部变量的int 。系统就会自动分配,当出了作用域之后,系统就会把分配的内容回收销毁掉。

    如果栈的剩余空间不够了,就会导致栈溢出。

    分配栈空间是非常快速的,类似于在机器码中一条cpu指令,因为不需要去做很多额外的操作。

    而堆空间,需要程序自己去控制,通过new/malloc来申请分配堆内存空间,然后再通过delete/free去释放掉内存空间,比起栈分配来说,它不会出了作用域之后就销毁掉,会保留在整个程序运行时间内,直到程序结束。

    堆空间的申请比起栈空间更加的复杂和缓慢。

    在操作系统中有一个空闲地址的链表,当我们分配堆内存的时候,首先回去在链表里去寻找空闲的空间,把这个堆节点从空闲列表中删掉,然后再把空闲空间分配给程序,多余的这部分还会重新放入到空闲链表中

    他是一个向高地址扩展的数据结构,而且因为这个特性,也是不连续的内存区域,堆内存也比较大。但是耗费成本高,所以申请、使用、删除耗费的成本比栈空间要大。

  • 相关阅读:
    eclipse fail to create java virtual machine
    sas软件连接Oracle数据库的办法
    JAVA中数据的读取与写入,不同类型数据的转换
    二维数组的在函数中的传递
    【转】值传递与引用传递
    【转】深拷贝与浅拷贝
    (转)JS报表控件highcharts应用
    highstocks.js使用指南
    (转)Highcharts使用指南(出处:http://liuhaorain.cnblogs.com )
    jQuery实现checkbox全选,反选
  • 原文地址:https://www.cnblogs.com/EvansPudding/p/12566311.html
Copyright © 2011-2022 走看看